1

我刚刚开始使用我从一本书中自学的openGL。在我的书中,有人告诉我使用三角形条来构建四边形,因为它更有效。本书使用这些顶点来创建四边形。

    vertices.push_back(-0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(0.0f);

    vertices.push_back(0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(0.0f);

    vertices.push_back(-0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(-1.0f);

    vertices.push_back(0.5f);
    vertices.push_back(0.0f);
    vertices.push_back(-1.0f);

我不明白为什么 z 轴不是恒定的,似乎 z 轴应该保持恒定而 y 轴应该改变以使正方形显示为 2d。我不明白为什么使用 z 轴。

这是其余的代码

在缓冲区中加载顶点

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertices.size(), &vertices[0], GL_STATIC_DRAW);

显示正方形

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 5.0, 0.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);

尽管我不明白这一点,但正方形仍然正确显示,所以它必须工作。

4

2 回答 2

2

您沿着 y 轴查看,因此 y 是恒定的,以使正方形垂直于视口。通过调用 gluLookAt(),您可以定义相机位置和观察方向。您可以修改 gluLookAt 的参数,使相机沿 z 方向看。在这种情况下,z 在您对正方形的定义中应该是常数。

看看http://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml

于 2013-12-01T19:30:47.447 回答
2

为了使四边形有意义,所有四个点都应位于一个平面内。它不必是 z=const 的平面。如果查看这些顶点,您可能会发现所有 3 个点的 y 始终为 0,因此四边形定义在 xz 平面中。您还可以看到相机放置在 (0, 5, 0.1) 处,向下看原点,因此使用 xz 平面确实有意义。

于 2013-12-01T19:32:25.390 回答