2012-03-16 75 views
1

任何人都可以看到有什么问题吗? 我正试图加载一个QUAD形状的图像并将其显示在一个框架上。当我运行它时,没有任何东西可以显示,不论是四边形还是图像。Jogl - 图片不会加载到纹理映射程序上? (JAVA)

程序代码如下:

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


} 

回答

0

你不四边形创建(glEnd())后写

gl.glFlush(); 

0

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

我用下面的代码,以质感和它工作正常

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

     if(texture == null) { 

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