【问题标题】:gluLookAt doesn't work as expectedgluLookAt 无法按预期工作
【发布时间】:2014-04-23 17:11:16
【问题描述】:

我有这个画圆的功能:

void draw_circle()
{
GLint num_of_tri = 32;
GLfloat vertex[3]; 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
const GLfloat delta_angle = 2.0*PI/float(num_of_tri);

//Draw Front tire
glBegin(GL_TRIANGLE_FAN);
    glColor3f(0.5, 0.5, 0.5);

    vertex[0] = vertex[1] = vertex[2] = 0.0;
    glVertex3fv(vertex);

    for(int i = 0; i < num_of_tri ; i++)
    {
        vertex[0] = cos(delta_angle*i) * wheelRadius; //wheelRadius is 1.0
        vertex[1] = sin(delta_angle*i) * wheelRadius;
        vertex[2] = 0.0;
        glVertex3fv(vertex);
    }
    vertex[0] = 1.0 * wheelRadius;
    vertex[1] = 0.0 * wheelRadius;
    vertex[2] = 0.0;
    glVertex3fv(vertex);
glEnd();
}

这是我的初始化函数

void init(void)
{    
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0.0, 0.0, 1.5, 0, 0, 0, 0, 1, 0);
}

这是我的显示功能

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    draw_circle();
    glFlush();
}

据我所知,圆圈是在原点绘制的。那么用眼睛值(0,0,1.5)调用gluLookAt函数不是问题吧?

但每当我用眼睛值 z 大于 1 调用 gluLookAt 时,圆圈就会消失。为什么会这样?

任何帮助将不胜感激。

【问题讨论】:

  • 你需要为一件事设置一个投影矩阵。使用默认投影,您的滚轮将不适合您的查看体积(zNear = -1,zFar = 1)。
  • 谢谢。 gluPerspective 完全改变 3d 对象是否正常?我画了一个 3d 车轮,和上面的 gluPerspective 完全搞砸了。

标签: opengl camera


【解决方案1】:

您错过了对gluPerspective 的呼叫。

(-1,1) 的默认 zNearzFar 值会在您将眼点移开一个单位以上时排除您的圆圈。

编辑您的 init 函数以包括:

gluPerspective( 45.0f, ( GLfloat )screenWidth / ( GLfloat )screenHeight, 0.1f, 100.0f );

或类似的东西。

【讨论】:

  • gluPerspective 完全改变一个 3d 对象是否正常?我画了一个 3d 车轮,和上面的 gluPerspective 完全搞砸了。
  • 如果没有看到之前/之后,很难说可能出了什么问题。但如果您还不熟悉透视(和正交)查看转换,我建议您阅读OpenGL Programming Guide - Chapter 3 - Projection Transforms。不过,最可能的罪魁祸首是我提供的代码中的纵横比或视野正在影响您所看到的内容。
  • stackoverflow.com/questions/23250989/… 如果你也能在这里帮助我,那就太好了。无论如何,谢谢!
  • 暂时没有机会,但是如果今晚晚些时候仍然没有答案,那么我会调查一下。
猜你喜欢
  • 2013-07-05
  • 1970-01-01
  • 2013-12-23
  • 2014-12-09
  • 2016-01-13
  • 2020-09-21
  • 2011-08-17
  • 2012-04-29
  • 2021-08-12
相关资源
最近更新 更多