gluLookAt无法正常工作

时间:2014-04-23 17:11:17

标签: opengl camera

我有绘制圆圈的功能:

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时,圆圈就会消失。为什么会这样?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您错过了对gluPerspective的来电。

zNear的默认zFar(-1,1)值将您的视点移动超过一个单位时排除您的圈子。

修改您的init功能以包含:

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

或类似的东西。