【问题标题】:My OpenGL program shows the top perspective, not front, why?我的 OpenGL 程序显示的是顶部透视图,而不是正面,为什么?
【发布时间】:2018-06-28 13:35:51
【问题描述】:

我制作了一个小 OpenGL 程序,它总有一天会变成游戏。我在 Blender 中制作了一个模型并将其导出为 STL 文件。但是当我在我的程序中绘制模型时(通过读取 STL 文件),它是从另一个角度显示的。 (我相信它来自顶部。)我认为它会出现在前视图中。就像 Blender 中的前视图。这是我绘制三角形的代码。

glBegin(GL_TRIANGLES);
glVertex3f(x1, y1, z1);
glVertex3f(x2, y2, z2);
glVertex3f(x3, y3, z3);
glEnd();

我玩过这些值,发现它会从前面显示出来。

glBegin(GL_TRIANGLES);
glVertex3f(x1, z1, -y1);
glVertex3f(x2, z2, -y2);
glVertex3f(x3, z3, -y3);
glEnd();

所以我的问题是如何以正确的方式做到这一点,而不仅仅是它有效。切换 y 和 z 坐标看起来不正确。是否有一个 OpenGL 函数来改变视角或类似的东西。为什么是顶部?

谢谢

【问题讨论】:

  • Blender 使用 Z 向上的 right-hand 坐标规则,这在 cad 程序中很常见,但在其他 3d 应用程序中并不常见。大多数出口商都提供了平移向上和向前轴的选项。

标签: opengl blender


【解决方案1】:

在渲染对象之前,将模型视图矩阵在 X 轴上旋转 90 度。

您从“顶部”看到您的对象的原因是因为 Blender 中模型的 Z 轴是上/下或上/下,而在 OpenGL 中它是后/前。 This 是一个说明我的意思的教程。

【讨论】:

  • 大多数搅拌机导出器还可以在导出模型时选择交换 y 轴和 z 轴。
  • “因为 Blender 中模型的 Z 轴是上/下或上/下,而在 OpenGL 中它是后/前” 谢谢,这就是答案。我按照你说的旋转了它,它起作用了。
【解决方案2】:

您从顶部查看几何图形,因为在视口上,X 轴从左到右,Y 轴从底部到顶部。随之而来的是,在right handed coordinate system 中,Z 轴指向视口之外(与视线相反)。

当然,这可以通过围绕 X 轴旋转 90° 来处理:

glMatrixMode( GL_MODELVIEW );
glLoadIdentity()
glRotatef( -90.0f, 1.0f, 0.0f, 0.0f );

但是,要定义场景的视图,您可以使用函数gluLookAt,它会进行必要的转换。

这个函数的参数是:

  • 观看场景的位置

  • 场景中你正在看的点

  • 向上的方向

此参数必须在世界空间中设置。请参见以下示例,其中位置为 (0, -1, 0),目标为 (0, 0, 0),上向量为 (0, 0, 1):

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
gluLookAt( 0.0, -1.0, 0.0,    0.0, 0.0, 0.0,    0.0, 0.0, 1.0 );

【讨论】:

    猜你喜欢
    • 2011-09-22
    • 2014-02-21
    • 2018-09-09
    • 1970-01-01
    • 2018-07-07
    • 2023-03-19
    • 2016-10-20
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多