我没有太多的OpenGL经验。我正在尝试画一个茶壶,并在茶壶周围移动相机。为此我使用了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()时,代码按预期执行;正在展示茶壶。
答案 0 :(得分:3)
您是否正确设置了投影矩阵?否则,您拨打gluLookAt
会导致茶壶距离太远,因此会被远处的飞机剪掉。
尝试将此添加到初始化代码(以及调整大小处理程序以在调整窗口大小时修复宽高比)。我把远飞机设置为100,这对于你的茶壶来说应该足够了。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective (60.0, width/(float)height, 0.1, 100.0);
glMatrixMode(GL_MODELVIEW);