2011-12-17 6 views
0

gluLookAt()에 대한 도움이 필요합니다. glOrtho() 호출 (y 축의 약간 높은보기에서 z 축 아래로보기를 만들기 위해 올바른 것으로 생각 함)를 사용하여이를 사용하려고합니다. gluLookAt()에 대한 이해에서 처음 세 매개 변수는 뷰가있는 곳 또는 "눈"이고 다음 세 곳은 눈이 보이는 곳이며 마지막 세 곳은 보는 각도입니다.gluLookat()을 사용하는 OpenGL

많은 설정을 시도했지만 화면에 아무 것도 렌더링 할 수 없으며 모든 시도가 빈 검은 색 화면이되었습니다. 필자는 웹에서 사용법을 연습하면서 전체 예제를 검색했으며 기능에 대한 설명을 찾을 수는 없습니다 (이해하지만 작동하지는 않는다고 생각합니다).

내가 시도한 코드가 너무 많아서 게시하지 않을 것이고, 이제는 코드를 완전히 엉망으로 만들었고 솔직히 말해서 그렇지 않습니다. 아무도 눈을 피로하고 싶다.

내 질문은 (는 테스트 용으로 만입니다) 사람이 게시하거나 더 나은에게 여기

작동 내가 현재 가지고있는 신 끔찍한 코드하는 gluLookAt를 (사용하는 작은 프로그램)의 예를 설명 할 수있다 :

#include <SDL/SDL.h> 
#include <SDL/SDL_opengl.h> 
#include <GL/glu.h> 
#include <windows.h> 

void init_ortho(int width, int height) 

{ 

SDL_Init(SDL_INIT_EVERYTHING); 
SDL_SetVideoMode(width,height,32,SDL_OPENGL); 
SDL_WM_SetCaption("OpenGL Test", NULL); 

glClearColor(0, 0, 0, 0); 
glViewport(0, 0, 640, 480); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, width , height , 0, 0, 20); 
glMatrixMode(GL_MODELVIEW); 
gluLookAt(0,0,0, 300,300, 5, 0,1,0); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT); 

} 

int Check(int keystroke, int x) 

{ 

if (keystroke == 65) 
x += 10; 

return x; 

} 

int main(int argc, char **argv) 
{ 
init_ortho(640, 480); 

glLoadIdentity(); 

int x = 300; 
bool quit = false; 

while (quit == false) 

{ 

for (int i = 0; i < 300; i++) 
{ 



if (GetAsyncKeyState(i) == -32767) 
{ 

    x = Check(i, x); 
if (x > 400) 
quit = true; 
    glTranslatef(x,300,10); 
glColor4f(1.0,1.0,1.0,1.0); 

glBegin(GL_QUADS); 
glVertex3f(0, 0,0); 
glVertex3f(100, 0,0); 
glVertex3f(100,100,0); 
glVertex3f(0, 100,0); 
glEnd(); 

glLoadIdentity(); 

SDL_GL_SwapBuffers(); 

glClear(GL_COLOR_BUFFER_BIT); 

} 
} 

} 



SDL_Quit(); 

return 0; 
} 
+0

일부 코드를 게시하면 도움이됩니다. – datenwolf

+0

일부 코드를 포함하도록 게시물을 편집했습니다 –

답변

0

그리고 화각은 마지막 세 개입니까?

틀린. 마지막 매개 변수는 카메라가 어느 방향으로 "직립"하는지를 정의합니다. 당신이 그것의 위에 지팡이를 두는 사진기를 상상하십시오. 그 꼭대기에있는 막대기가 위쪽 벡터입니다.


죄송합니다.이 모든 것을하는 방식은 몹시 잘못되었습니다.

먼저 프로퍼티 이벤트 처리 루프가 없습니다. 어딘가에 SDL_WaitEvent 또는 SDL_PollEvent으로 전화해야합니다. 또한 일부 애니메이션의 경우 프로그램 메인 루프 내에서 for 0...300 루프를 사용하는 것은 전혀 의미가 없습니다.

그러면 gluLookAt는 렌더링 된 삼각형을 한 눈에 볼 수 있도록 뷰 변환을 생성합니다.

코드를 수정할 방법이 없습니다. 나는 처음부터 시작하고, 적절한 튜토리얼을 듣는다.

+0

이 코드가 대부분 쓰레기라는 것을 알고 있습니다. 내 유일한 관심사는 gluLookAt()가 실제로 빈 화면이 아닌 다른 것을 보는 것입니다. 코드에서 잘못하고 있지만 어떻게 해야할지 모르겠다. –

+0

답변을 주셔서 감사합니다. gluLookAt()가이 코드 조각에서 작동 할 수있는 방법이 없습니까? –

+0

@ Michael : gluLookAt는 당신의 문제 중 가장 적은 것입니다. 코드를 완전히 재구성해야합니다. 그렇지 않으면 무언가를 제대로 표시하는 데 어려움이 있습니다. – datenwolf

관련 문제