2012-06-25 4 views
1

그리기 순서와 관련이 있다고 생각하지만 지금은 포기했습니다. 기본적으로 쿼드는 그리기는하지만 올바른 순서가 아니며 후면 컬링이 활성화되어 있지만 도움이되지 않습니다.내 큐브가 LWJGL/OpenGL에서 제대로 그려지지 않는 이유는 무엇입니까?

import java.awt.Color; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.nio.DoubleBuffer; 

import javax.imageio.ImageIO; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.input.Keyboard; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.lwjgl.opengl.GL11; 
import org.lwjgl.util.glu.GLU; 

public class Main { 
public Main() { 
    this.start(); 
} 
private void start() { 
    try { 
     Display.setDisplayMode(new DisplayMode(640,640)); 
     Display.setTitle("FPSTest"); 
     Display.create(); 
    } catch (LWJGLException e) { 
     e.printStackTrace(); 
    } 

    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(-5, 5, -5, 5, -1, 5); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    int x=0; 
    while (!Display.isCloseRequested()) { 
     Display.sync(60); 
     //poll for keypresses first, default key is 'forward' 
     //if(Keyboard.isKeyDown(Keyboard.KEY_NUMPAD8)); 



     GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT|GL11.GL_COLOR_BUFFER_BIT); 
     GL11.glEnable(GL11.GL_CULL_FACE|GL11.GL_DEPTH_TEST); 
     GL11.glColor3f(1, 0, 0); 
     GL11.glRotatef(x++, 1, 1, 1); 
     GL11.glBegin(GL11.GL_QUADS); 
     GL11.glColor3f(0.0f,1.0f,0.0f);   // Set The Color To Green 
     GL11.glVertex3f(1.0f, 1.0f,-1.0f);   // Top Right Of The Quad (Top) 
     GL11.glVertex3f(-1.0f, 1.0f,-1.0f);   // Top Left Of The Quad (Top) 
     GL11.glVertex3f(-1.0f, 1.0f, 1.0f);   // Bottom Left Of The Quad (Top) 
     GL11.glVertex3f(1.0f, 1.0f, 1.0f);   // Bottom Right Of The Quad (Top) 
     GL11.glColor3f(1.0f,0.5f,0.0f);   // Set The Color To Orange 
     GL11.glVertex3f(1.0f,-1.0f, 1.0f);   // Top Right Of The Quad (Bottom) 
     GL11.glVertex3f(-1.0f,-1.0f, 1.0f);   // Top Left Of The Quad (Bottom) 
     GL11.glVertex3f(-1.0f,-1.0f,-1.0f);   // Bottom Left Of The Quad (Bottom) 
     GL11.glVertex3f(1.0f,-1.0f,-1.0f);   // Bottom Right Of The Quad (Bottom) 
     GL11.glColor3f(1.0f,0.0f,0.0f);   // Set The Color To Red 
     GL11.glVertex3f(1.0f, 1.0f, 1.0f);   // Top Right Of The Quad (Front) 
     GL11.glVertex3f(-1.0f, 1.0f, 1.0f);   // Top Left Of The Quad (Front) 
     GL11.glVertex3f(-1.0f,-1.0f, 1.0f);   // Bottom Left Of The Quad (Front) 
     GL11.glVertex3f(1.0f,-1.0f, 1.0f);   // Bottom Right Of The Quad (Front) 
     GL11.glColor3f(1.0f,1.0f,0.0f);   // Set The Color To Yellow 
     GL11.glVertex3f(1.0f,-1.0f,-1.0f);   // Bottom Left Of The Quad (Back) 
     GL11.glVertex3f(-1.0f,-1.0f,-1.0f);   // Bottom Right Of The Quad (Back) 
     GL11.glVertex3f(-1.0f, 1.0f,-1.0f);   // Top Right Of The Quad (Back) 
     GL11.glVertex3f(1.0f, 1.0f,-1.0f);   // Top Left Of The Quad (Back) 
     GL11.glColor3f(0.0f,0.0f,1.0f);   // Set The Color To Blue 
     GL11.glVertex3f(-1.0f, 1.0f, 1.0f);   // Top Right Of The Quad (Left) 
     GL11.glVertex3f(-1.0f, 1.0f,-1.0f);   // Top Left Of The Quad (Left) 
     GL11.glVertex3f(-1.0f,-1.0f,-1.0f);   // Bottom Left Of The Quad (Left) 
     GL11.glVertex3f(-1.0f,-1.0f, 1.0f);   // Bottom Right Of The Quad (Left) 
     GL11.glColor3f(1.0f,0.0f,1.0f);   // Set The Color To Violet 
     GL11.glVertex3f(1.0f, 1.0f,-1.0f);   // Top Right Of The Quad (Right) 
     GL11.glVertex3f(1.0f, 1.0f, 1.0f);   // Top Left Of The Quad (Right) 
     GL11.glVertex3f(1.0f,-1.0f, 1.0f);   // Bottom Left Of The Quad (Right) 
     GL11.glVertex3f(1.0f,-1.0f,-1.0f);   // Bottom Right Of The Quad (Right) 
     GL11.glEnd(); 
     GL11.glLoadIdentity(); 
     Display.update(); 
    } 

    Display.destroy(); 
} 

public static void main(String[] argv) { 
    new Main(); 
} 

} 

답변

3

GL11.glEnable(GL11.GL_CULL_FACE|GL11.GL_DEPTH_TEST);

당신은이 작업을 수행 할 수 없습니다. 각 glEnable을 별도의 명령으로 제공해야합니다. 대신이 방법을 사용해보고 도움이되는지 확인하십시오.

GL11.glEnable(GL11.GL_CULL_FACE); 
GL11.glEnable(GL11.GL_DEPTH_TEST); 

glGetError도 사용하십시오!

+0

정말 고마워요, 당신은 최고입니다! – striking