繁体   English   中英

Jogl-图片将不会在纹理映射过程中加载? (JAVA)

[英]Jogl - Picture won't load on texture mapping procedure? (JAVA)

谁能看到什么问题? 我正在尝试在QUAD形状上加载图像并将其显示在框架上。 当我运行它时,没有显示任何东西,既没有四边形,也没有图像。

程序代码如下:

package firstAttempt;

import com.sun.opengl.util.texture.Texture;
import com.sun.opengl.util.texture.TextureIO;
import java.io.File;
import java.io.IOException;
import java.nio.IntBuffer;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;

/**
 * For now we will focus only two of the GLEventListeners init() and display().
 */
public class TextureGLEventListener implements GLEventListener {

    /**
     * Interface to the GLU library.
     */
    private GLU glu;
    Texture tex;

    /**
     * Take care of initialization here.
     */
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        glu = new GLU(); 

        //activate texture mapping for 2D
        gl.glEnable(GL.GL_TEXTURE_2D);
        try{
            //load texture
            tex = TextureIO.newTexture(new File("C://Users/encore/Desktop/DSC05255final.jpg"), true);
            tex.bind();
        }
        catch(IOException ex){
            System.err.println(ex);
        }


        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

        gl.glViewport(0, 0, 900, 550);
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluOrtho2D(0.0, 900.0, 0.0, 550.0);
    }

    /**
     * Take care of drawing here.
     */
    public void display(GLAutoDrawable drawable) {

        GL gl = drawable.getGL();

        gl.glBegin (GL.GL_QUADS);
        gl.glTexCoord2d(0, 0);
        gl.glVertex2d (-0.5, -0.5);
        gl.glTexCoord2d(1, 0);
        gl.glVertex2d (0.5, -0.5);
        gl.glTexCoord2d(1, 1);
        gl.glVertex2d (0.5, 0.5);
        gl.glTexCoord2d(0, 1);
        gl.glVertex2d (-0.5, 0.5);
        gl.glEnd ();



    }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width,
            int height) {
    }

    public void displayChanged(GLAutoDrawable drawable,
            boolean modeChanged, boolean deviceChanged) {
    }


}

这正好说明了您在做什么错http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture

您将忽略重要的opengl调用。 因此,纹理已加载但未“拉伸”。

您永远不会进入纹理化模式。

我使用下面的代码进行纹理处理,效果很好

        gl.glMatrixMode(GL.GL_TEXTURE);
        gl.glLoadIdentity();

        if(texture == null) {

            texture = TextureIO.newTexture(img, true);
            texture.enable();
            texture.bind();
        }

你不写

gl.glFlush();

创建完四边形之后( glEnd() )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM