2010-06-17 3 views
3

나는 그 라이브러리를 통해 OpenGL을 사용하고 있습니다. 내가 깊이 테스트를 가능하게하고 크기 조정에 내가 할 : 아무리 내가 번역하는 방법을 몇 가지 이유 큐브에 대한OpenGL 다각형이 왼쪽 상단에 붙어 있습니까?

float BOX_SIZE = 200.0f; 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 


     glRotatef(0.5, 0, 0.0f, 1.0f); 
     glBegin(GL_QUADS); 

     //Top face 
     glColor3f(1.0f, 1.0f, 0.0f); 
     glNormal3f(0.0, 1.0f, 0.0f); 
     glVertex3f(500 + -BOX_SIZE/2, BOX_SIZE/2, -BOX_SIZE/2); 
     glVertex3f(500 + -BOX_SIZE/2, BOX_SIZE/2, BOX_SIZE/2); 
     glVertex3f(500 + BOX_SIZE/2, BOX_SIZE/2, BOX_SIZE/2); 
     glVertex3f(500 + BOX_SIZE/2, BOX_SIZE/2, -BOX_SIZE/2); 

     //Bottom face 
     glColor3f(1.0f, 0.0f, 1.0f); 
     glNormal3f(0.0, -1.0f, 0.0f); 
     glVertex3f(-BOX_SIZE/2, -BOX_SIZE/2, -BOX_SIZE/2); 
     glVertex3f(BOX_SIZE/2, -BOX_SIZE/2, -BOX_SIZE/2); 
     glVertex3f(BOX_SIZE/2, -BOX_SIZE/2, BOX_SIZE/2); 
     glVertex3f(-BOX_SIZE/2, -BOX_SIZE/2, BOX_SIZE/2); 

     //Left face 
     glNormal3f(-1.0, 0.0f, 0.0f); 
     glColor3f(0.0f, 1.0f, 1.0f); 
     glVertex3f(-BOX_SIZE/2, -BOX_SIZE/2, -BOX_SIZE/2); 
     glVertex3f(-BOX_SIZE/2, -BOX_SIZE/2, BOX_SIZE/2); 
     glColor3f(0.0f, 0.0f, 1.0f); 
     glVertex3f(-BOX_SIZE/2, BOX_SIZE/2, BOX_SIZE/2); 
     glVertex3f(-BOX_SIZE/2, BOX_SIZE/2, -BOX_SIZE/2); 

     //Right face 
     glNormal3f(1.0, 0.0f, 0.0f); 
     glColor3f(1.0f, 0.0f, 0.0f); 
     glVertex3f(BOX_SIZE/2, -BOX_SIZE/2, -BOX_SIZE/2); 
     glVertex3f(BOX_SIZE/2, BOX_SIZE/2, -BOX_SIZE/2); 
     glColor3f(0.0f, 1.0f, 0.0f); 
     glVertex3f(BOX_SIZE/2, BOX_SIZE/2, BOX_SIZE/2); 
     glVertex3f(BOX_SIZE/2, -BOX_SIZE/2, BOX_SIZE/2); 

     glEnd(); 

     glEnable(GL_TEXTURE_2D); 

     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
     glColor3f(1.0f, 1.0f, 1.0f); 
     glBegin(GL_QUADS); 

     //Front face 
     glNormal3f(0.0, 0.0f, 1.0f); 
     glTexCoord2f(0.0f, 0.0f); 
     glVertex3f(-BOX_SIZE/2, -BOX_SIZE/2, BOX_SIZE/2); 
     glTexCoord2f(1.0f, 0.0f); 
     glVertex3f(BOX_SIZE/2, -BOX_SIZE/2, BOX_SIZE/2); 
     glTexCoord2f(1.0f, 1.0f); 
     glVertex3f(BOX_SIZE/2, BOX_SIZE/2, BOX_SIZE/2); 
     glTexCoord2f(0.0f, 1.0f); 
     glVertex3f(-BOX_SIZE/2, BOX_SIZE/2, BOX_SIZE/2); 

     //Back face 
     glNormal3f(0.0, 0.0f, -1.0f); 
     glTexCoord2f(0.0f, 0.0f); 
     glVertex3f(-BOX_SIZE/2, -BOX_SIZE/2, -BOX_SIZE/2); 
     glTexCoord2f(1.0f, 0.0f); 
     glVertex3f(-BOX_SIZE/2, BOX_SIZE/2, -BOX_SIZE/2); 
     glTexCoord2f(1.0f, 1.0f); 
     glVertex3f(BOX_SIZE/2, BOX_SIZE/2, -BOX_SIZE/2); 
     glTexCoord2f(0.0f, 1.0f); 
     glVertex3f(BOX_SIZE/2, -BOX_SIZE/2, -BOX_SIZE/2); 

     glEnd(); 
     glDisable(GL_TEXTURE_2D); 
//code goes here 
al_flip_display(); 

0,0과에서 확장하는 것 같다

glEnable(GL_CULL_FACE); 
    glCullFace(GL_BACK); 
    glEnable(GL_DEPTH_TEST); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glFrustum(0,event.display.width,event.display.height,0,1,300); 

그럼 내 그림처럼 보지 않는다 theres 항상 0,0에 꼭지점. 나는 무엇을 잘못 했는가? 감사합니다.

답변

2

알레그로 라이브러리에 대해 자세히 알지 못하지만 코드 스 니펫을 읽을 때 두 가지 사항이 떠 올립니다.

  1. 이유는 크기 조정에 따라 glViewport(event.display.width,event.display.height) 를 호출하지 않습니다? glFrustum 호출 은 일반적으로 디스플레이 크기 에 의존해서는 안됩니다.

  2. glMatrixMode(GL_MODELVIEW) 번으로 전화 하시겠습니까? 그렇지 않으면 모든 행렬 연산이 프로젝션 행렬에 적용됩니다 ( ).

나는 희망한다.

관련 문제