我有绘制圆圈的功能:
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时,圆圈就会消失。为什么会这样?
任何帮助都将不胜感激。
答案 0 :(得分:2)
您错过了对gluPerspective的来电。
zNear
的默认zFar
和(-1,1)
值将您的视点移动超过一个单位时排除您的圈子。
修改您的init
功能以包含:
gluPerspective( 45.0f, ( GLfloat )screenWidth / ( GLfloat )screenHeight, 0.1f, 100.0f );
或类似的东西。