Jogl - 图片不会加载纹理映射程序? (JAVA)

时间:2012-03-16 19:41:37

标签: java opengl textures jogl

任何人都可以看到错误吗? 我试图在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) {
    }


}

3 个答案:

答案 0 :(得分:0)

你不写

gl.glFlush();
创建四边形后的

glEnd())。

答案 1 :(得分:0)

这准确地解释了你做错了什么http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture

您省略了重要的opengl调用。所以纹理加载但不“拉伸”。

答案 2 :(得分:0)

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

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

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

        if(texture == null) {

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