【问题标题】:gluLookAt() makes blank screengluLookAt() 使屏幕空白
【发布时间】:2011-09-19 08:47:42
【问题描述】:

我没有太多 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() 未被调用时,代码按预期执行;展示了一个茶壶。

【问题讨论】:

  • 可能你没看茶壶?
  • 这样的事情正在发生。但是当没有调用 camera() 时,我可以按预期看到茶壶。
  • 因为当你不打电话给camera()时,你不会改变你正在看的东西。
  • 我不太明白。您可以发布对代码的更改吗?
  • 不。 OpenGL 红皮书已经通过示例涵盖了所有这些,我不想重新编写它! :)

标签: c++ opengl glut glu perspectivecamera


【解决方案1】:

您是否正确设置了投影矩阵?否则,您拨打gluLookAt 会导致茶壶距离太远,从而被远平面夹住。

尝试将此添加到您的初始化代码(以及您的调整大小处理程序以在调整窗口大小时修复纵横比)。我已将远位面设置为 100,这对你的茶壶来说应该足够了。

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

【讨论】:

  • 谢谢!这似乎已经解决了!
  • 设置投影和视口应该在显示函数中完成,而不是在重塑处理程序中。
猜你喜欢
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2017-02-16
  • 1970-01-01
相关资源
最近更新 更多