问题描述
我正在尝试使用opengl显示3d点(50,30,20),但注意在屏幕上显示。我该怎么解决?
init:
void init()
{
glClearColor(0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(20.0,70.0,10.0,40.0,30.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
显示:
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glPointSize();
glBegin(GL_POINTS);
glVertex3f(50.0,30.0,20.0);
glEnd();
glFlush();
glutSwapBuffers();
}
解决方法
您的点被正交投影的近平面裁剪:
glOrtho(20.0,70.0,10.0,40.0,30.0);
glVertex3f(50.0,30.0,20.0);
OpenGL坐标系是右手系(请参见Right-hand rule)。在视图空间中,y轴指向上方,x轴指向右侧。由于z轴是x和y轴的Cross product,因此它指向视图之外。
因此,您必须沿负z轴在近平面和远平面之间移动点:
glVertex3f(50.0,20.0);
glVertex3f(50.0,-20.0);