【问题标题】:Applying a transformation matrix in opengl在opengl中应用变换矩阵
【发布时间】:2014-12-09 04:55:04
【问题描述】:

如何使用标准 opengl 命令应用 4x4 旋转矩阵?我以前使用过旋转向量,但我找不到如何将旋转矩阵应用于对象?

编辑更多信息:

我正在尝试使用作为物理模拟器一部分的方向矢量来旋转原点中的一个点。有人建议我使用向上向量和叉积来获得矩阵:

{方向、向上、交叉、原点}

但我不知道如何在 openGL 中应用它。为什么会贬值?

生成 2D 而不是 3D 模型的矩阵:

Matrix44f rotation = Matrix44f(
    { crossproduct1[0], crossproduct1[1], crossproduct1[2], 0 },
    { 0, 1, 0, 0 },
    { directionvector[0], directionvector[1], directionvector[2], 0 },
    { 0, 0, 0, 1 });

    glMultMatrixf(rotation);

【问题讨论】:

  • CPU 上是否已经生成了旋转矩阵?如果在弃用的 OpenGL 中是这样,您可以使用glMultMatrixf (...)。该矩阵应以列优先顺序存储为 16 个单精度浮点数的数组。

标签: opengl


【解决方案1】:

根据您的描述 ({direction, up, cross, origin}),您要描述的是 ModelView 矩阵。 但是,您的 X 轴和 Z 轴似乎被调换了。

ModelView 矩阵是这样导出的:

| Left_x  Up_x  Fwd_x  Eye_x |
| Left_y  Up_y  Fwd_y  Eye_y |
| Left_z  Up_z  Fwd_z  Eye_z |
|  0.0    0.0    0.0    1.0  |

其实就是一个旋转的组合(左上角的3x3矩阵) 和平移矩阵(最后一列)。

X(左)、Y(上)和 Z(前)轴通常是正交的,因此您可以计算左xyz 作为 Fwd 和 Up 的叉积。


关于 glMultMatrixf (...) 被弃用的原因,OpenGL 矩阵堆栈在 OpenGL 3.0 中被视为弃用,并从 OpenGL 3.1 开始被删除。这样做是为了消除固定功能的顶点处理并转向仅着色器的 API 设计。

在 OpenGL 3.0 或更早版本、带有 GL_ARB_compatbility 扩展或 3.2+ 兼容性配置文件的 OpenGL 3.1 中,您可以继续使用 API 的已弃用部分。但在核心 OpenGL 3.1+ 中,这部分 API 不再存在。

【讨论】:

  • 您好,非常感谢。我得到了上面的矩阵来进行旋转,但是模型看起来是平的?
  • @user3319320:我不确定我理解你的意思。您是否有机会链接到您的问题或为您的问题添加屏幕截图?
  • 我会试着找一个例子。 3D 对象仅在一个轴上绘制为完全 2D 图像......看起来它已经被汽车碾过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2010-10-25
相关资源
最近更新 更多