2011-09-19 104 views
1

我沒有太多的OpenGL體驗。我試圖畫一個茶壺,並在茶壺周圍移動一個攝像頭。爲此,我使用了gluLookAt函數。問題是,當我打電話給gluLookAt時,屏幕是空白的,我看不到我的茶壺。gluLookAt()使空白屏幕

#include "openGLer.h" 

void openGLer::simulate(grid* toSim, int* argc, char** argv) 
{ 
    myGrid = toSim; 
    glutInit(argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowSize(400, 400); //Set the window size 
    glutCreateWindow(""); 
    glutDisplayFunc(display); 
    glutIdleFunc(display); 
    glutKeyboardFunc(handleKeypress); 
    glEnable(GL_DEPTH_TEST); 
    glutMainLoop(); 
} 

void openGLer::handleKeypress(unsigned char key, //The key that was pressed 
           int x, int y) 
{ 
    switch (key) 
    { 
    case 27: exit(0); 
    } 
} 

void openGLer::camera() 
{ 
    gluLookAt(3, 3, 0, 
       0, 0, 0, 
       0, 1, 0 
      ); 
} 

void openGLer::draw() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    camera(); 
    glutWireTeapot(0.5); 
    glutSwapBuffers(); 
} 

void openGLer::display() 
{ 
    draw(); 
} 

爲什麼gluLookAt()會使屏幕變爲空白,我該如何解決這個問題?未調用camera()時,代碼按預期執行;顯示一個茶壺。

+1

也許你不看茶壺? –

+0

這樣的事情正在發生。但是當camera()沒有被調用時,那麼我可以按照預期看到茶壺。 – Mikhail

+0

因爲當你不調用'camera()'時,你不會改變你正在看的東西。 –

回答

2

您是否正確設置了投影矩陣?否則,您致電gluLookAt將導致茶壺太遠,因此被遠機截斷。

嘗試將此添加到您的初始化代碼(也調整大小處理程序來修改窗口調整大小時的縱橫比)。我已經將飛機設置爲100,這對你的茶壺應該足夠了。

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective (60.0, width/(float)height, 0.1, 100.0); 
glMatrixMode(GL_MODELVIEW); 
+0

謝謝!這似乎修復了它! – Mikhail

+0

設置投影和視口應該在顯示功能中完成,而不是在整形處理程序中完成。 – datenwolf