使用opengl显示3D点

时间:2018-10-14 16:33:43

标签: c++ opengl 3d glut

简而言之,我只是想显示一个3d点,但什么都没显示!

如何显示?下面的代码有什么问题,任何人都可以帮忙吗?

init:

void init(void)
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glOrtho(-200, 0.0, -50, 100, 70, 300);
}

显示:

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glPointSize(2);
    glBegin(GL_POINTS);
    glVertex3f(-120.0, 25.0, 0.0);
    glEnd();

    glutSwapBuffers();
}

重塑:

  void reshape(int w, int h)
    {
        glViewport(0, 0, (GLsizei)w, (GLsizei)h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(65.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(-120, 25, 0.0, -120, 25, 150, 0, 1, 0);
    }

1 个答案:

答案 0 :(得分:1)

reshape函数中,您将近平面和远平面分别设置为1.0和20.0:

gluPerspective(65.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0);

所有不在近平面和远平面之间的几何均被裁剪。

这意味着从点到视点的z距离(眼睛坐标)必须在1.0到20.0的范围内。

该点的z坐标为0.0:

glVertex3f(-120.0, 25.0, 0.0);

视点(相机)的z坐标也为0.0(gluLookAt的第三个参数):

gluLookAt(-120, 25, 0.0, -120, 25, 150, 0, 1, 0);

这将导致视点(眼睛)与该点之间的距离为0-0 = 0,并且该点被裁剪。


要解决此问题,您必须更改点的z坐标:

glVertex3f(-120.0, 25.0, 5.0);

或观点:

gluLookAt(-120, 25, -5.0, -120, 25, 150, 0, 1, 0);