Jogl - 图片无法加载纹理映射程序?(爪哇)



有人能看到出了什么问题吗?我正在尝试将图像加载到四边形上,并将其显示在框架上。当我运行它时,既没有显示四边形,也没有显示图像。

程序代码如下:

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) {
    }

}

您不编写

gl.glFlush();

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

这准确地解释了您做错了什么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();
        }

最新更新