2

我画了很多线来形成一个网格。我想看到网格在其 X 轴上旋转,但我从来没有得到预期的结果。我试过了glRotatefgluLookAt但它不能按我想要的方式工作。请看下面的图片。

这是网格

这就是我想看到的样子

编辑:天哪,在这里发布代码也很困难,哈哈,反正就是这样。Edit2:删除,只留下有问题的代码。

请找到下面的代码,无论我如何设置gluLookAt,网格结果都不会在我想要的透视图中。

#include <GL/glut.h>

void display() {

    ...

    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_LINES);
    for (int i = 0; i < 720; i += 3)
    {   
        glColor3f(0, 1, 1);
        glVertex3f(linePoints[i], linePoints[i + 1], linePoints[i + 2]);
    }
    glEnd();

    glFlush();
}
void init() {

    glClearColor(0.0, 0.0, 0.0, 1.0);
    glColor3f(1.0, 1.0, 1.0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, 4.0 / 3.0, 1, 40);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0, -2, 1.25, 0, 0, 0, 0, 1, 0);
}
4

1 回答 1

1

让我们假设,您在世界的 xy 平面上有一个网格:

glColor3f(0, 1, 1);
glBegin(GL_LINES);
for (int i = 0; i <= 10; i ++)
{   
    // horizontal
    glVertex3f(-50.0f + i*10.0f, -50.0f, 0.0f);
    glVertex3f(-50.0f + i*10.0f,  50.0f, 0.0f);

    // vertical
    glVertex3f(-50.0f, -50.0f + i*10.0f, 0.0f);
    glVertex3f( 50.0f, -50.0f + i*10.0f, 0.0f);
}
glEnd();

确保 到投影的远平面的距离足够大(请参阅gluPerspective)。所有不在视锥体的近远平面之间的几何图形都将被剪裁。
进一步确保纵横比(4.0 / 3.0)与视口矩形(窗口)的比例相匹配。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, 4.0 / 3.0, 1, 200);

为了使用gluLookAt,视图的向上向量必须垂直于网格。如果网格与 xy 平面平行排列,则向上矢量为 z 轴 (0, 0, 1)。
目标(中心)是网格的中心(0,0,0)。
视点(眼睛位置)应该在网格的上方和前方,例如 (0, -55, 50)。请注意,视点用于左下角为 (-50, -50, 0) 和右上角为 (50, 50, 0) 的网格。

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -55.0, 50.0, 0, 0, 0, 0, 0, 1);

于 2020-05-27T10:59:47.463 回答