2013-02-28 3 views
1

간단한 3D 장면을 나타내는 학습 프로젝트가 있습니다. 나는 비 원점에 구를 그려야한다. 나중에이 함수를 별도의 함수 또는 메서드로 구현할 예정입니다.openGL 변형과 gluLookAt()

gluLookAt()을 사용하여 시점을 설정하면 glTranslatef()을 사용하여 모델 뷰 행렬을 약간의 오프셋 및 그리기 영역으로 변환합니다. 불행히도 구가 표시되지 않습니다. 모델 - 뷰 매트릭스가 다가오고있는 것이 맞습니까?

void display(void){  
    glClear(GL_COLOR_BUFFER_BIT); 
    glLoadIdentity(); 
    gluLookAt(1, 0 ,1, 0, 0, 0, 0, 1, 0);  
    glColor3b(197, 96, 63);  
    glPushMatrix(); 
    glLoadIdentity(); 
    glTranslatef(0.1, 0, 0); 
    glutWireSphere(0.2, 20, 10); 
    glPopMatrix();  
    glFlush(); 
} 

void reshape(int w, int h){ 
    glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho ((float)w/(float)h, (float)-w/(float)h, -1, 1, 0.8, 100); 
    glMatrixMode(GL_MODELVIEW); 
} 
+0

가능한 복제본 http://stackoverflow.com/q/15006905/752976 –

답변

3

아니요, 아닙니다. 이 뷰 행렬을 영점으로

gluLookAt(1, 0 ,1, 0, 0, 0, 0, 1, 0); 
glColor3b(197, 96, 63);  
glPushMatrix(); 
glLoadIdentity(); // why it should be there? 

, 당신은 이 계정으로 glLookAt을 복용하지 원점 좌표에 상대적으로 개체를 받고있다. 그것에 대한 호출은 사실 무시됩니다.

  1. 는 "카메라 매트릭스"
  2. 밀어
  3. 객체
  4. 팝 그리기 개체의 위치
  5. 번역과로 돌아가 스택에 매트릭스를 설정합니다 : 그것은으로 코딩해야한다 2.

그래서 당신은 가상의 "카메라"를 설정하려는 경우, 당신은 에이은과 오브젝트의 위치를 결합 카메라 매트릭스 자체.

+0

이제는 분명히 감사합니다. – vard

1

당신의 접근 방식이 그럴만한 이유가되지 않습니다. 문제는 여기에 있습니다 :

glPushMatrix(); 
glLoadIdentity(); 
glTranslatef(0.1, 0, 0); 

는하지만, 번역하기 전에 정체성 행렬을 설정하여 좋은 생각이다 밀어 (나중에 터지는), 당신은 느슨한 어떤 변환을 시청 변환이 gluLookAt 설립 특히, 이전 완료 . 따라서 개별 변형을 올바르게 연결하려면이 값을 glLoadIdentity으로 제거하십시오.

항상 모든 행렬 변환 기능, glTranslate, glOrtho, 또는 gluLookat처럼 항상 현재 선택된 (와 glMatrixMode) 행렬을 수정하고 바로 교체하지 않는 점에 유의하십시오. 또한 glOrthogluLookAt으로 전화하기 전에 glLoadIdentity을 수행하는 이유이기도합니다.