在opengl中应用变换矩阵

时间:2014-12-08 15:31:08

标签: opengl

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

使用更多信息进行修改:

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

{direction,up,cross,origin}

但我不知道如何在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);

1 个答案:

答案 0 :(得分: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已不复存在。