2011-09-19 54 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