2014-09-19 83 views
0

我在3D空間渲染一個正方形。當我使用glTranslatef()方法並添加一個z座標時,方塊不再可見。當z座標大於1或小於-1時,平方不再顯示(我通過將z座標設置爲1來測試它。如果並且它不顯示)。LWJGL glTranslatef沒有渲染深度

Main.java

import java.util.logging.Level; 
import java.util.logging.Logger; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 

import static org.lwjgl.opengl.GL11.*; 

public class Main { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     initDisplay(); 
     gameLoop(); 
     cleanUp(); 
    } 

    public static void initDisplay(){ 
     try { 
      Display.setDisplayMode(new DisplayMode(800, 600)); 
      Display.setTitle("AWESOMENESS!"); 
      Display.create(); 
     } catch (LWJGLException e) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, e); 
     } 
    } 

    public static void gameLoop(){ 
     Camera cam = new Camera(70, (float)Display.getWidth()/(float)Display.getHeight(), 0.3f, 1000); 


     while(!Display.isCloseRequested()){ 

      glClear(GL_COLOR_BUFFER_BIT); 
      glLoadIdentity(); 
      cam.useView(); 

      glPushMatrix();{ 
       glColor3f(1.0f, 0.5f, 0f); 
       //This is the problematic line. When the 3rd param goes above 1 or below -1 the 
       //square disappers. 
       glTranslatef(0,0,-10); 
       glBegin(GL_QUADS);{ 
        glVertex3f(0,0,0); 
        glVertex3f(0,1,0); 
        glVertex3f(1,1,0); 
        glVertex3f(1,0,0); 
       } 
       glEnd(); 
      } 
      glPopMatrix(); 

      Display.update(); 
     } 
    } 

    public static void cleanUp(){ 
     Display.destroy(); 
    } 

} 

Camera.java

import static org.lwjgl.opengl.GL11.*; 
import static org.lwjgl.util.glu.GLU.*; 

public class Camera { 

    //Position 
    private float x; 
    private float y; 
    private float z; 
    //Rotation 
    private float rx; 
    private float ry; 
    private float rz; 

    private float fov; 
    private float aspect; 
    private float near; 
    private float far; 

    public Camera(float fov, float aspect, float near, float far) { 
     x = 0; 
     y = 0; 
     z = 0; 
     rx = 0; 
     ry = 0; 
     rz = 0; 
     this.fov = fov; 
     this.aspect = aspect; 
     this.near = near; 
     this.far = far; 
     initProjection(); 
    } 

    private void initProjection(){ 
     glMatrixMode(GL_PROJECTION_MATRIX); 
     glLoadIdentity(); 
     gluPerspective(fov, aspect, near, far); 
     glMatrixMode(GL_MODELVIEW); 
    } 

    public void useView(){ 
     glRotatef(rx, 1, 0, 0); 
     glRotatef(ry, 0, 1, 0); 
     glRotatef(rz, 0, 0, 1); 
     glTranslatef(x, y, z); 
    } 

    public float getX() { 
     return x; 
    } 

    public float getY() { 
     return y; 
    } 

    public float getZ() { 
     return z; 
    } 

    public float getRx() { 
     return rx; 
    } 

    public float getRy() { 
     return ry; 
    } 

    public float getRz() { 
     return rz; 
    } 

    public float getFov() { 
     return fov; 
    } 

    public float getAspect() { 
     return aspect; 
    } 

    public float getNear() { 
     return near; 
    } 

    public float getFar() { 
     return far; 
    } 

    public void setX(float x) { 
     this.x = x; 
    } 

    public void setY(float y) { 
     this.y = y; 
    } 

    public void setZ(float z) { 
     this.z = z; 
    } 

    public void setRx(float rx) { 
     this.rx = rx; 
    } 

    public void setRy(float ry) { 
     this.ry = ry; 
    } 

    public void setRz(float rz) { 
     this.rz = rz; 
    } 

    public void setFov(float fov) { 
     this.fov = fov; 
    } 

    public void setAspect(float aspect) { 
     this.aspect = aspect; 
    } 

    public void setNear(float near) { 
     this.near = near; 
    } 

    public void setFar(float far) { 
     this.far = far; 
    } 

} 

回答

2
glMatrixMode(GL_PROJECTION_MATRIX); 

相反應該是:

glMatrixMode(GL_PROJECTION); 

GL_PROJECTION_MATRIX不呈現第三維。關於這個問題沒有進一步的文件。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – 2014-09-19 05:36:09

+0

@UwePlonus:你爲什麼會爲這不是一個答案投票?它正確地指出了發佈代碼中的關鍵問題。 – 2014-09-19 05:58:58

+0

@ReetoKoradi如我的評論所述thi只是對本網站的評論。答案應該有更多的文字解釋,例如兩種模式之間的差異。 – 2014-09-19 06:02:48