如何在OpenGL中计算着色器的变换矩阵

时间:2012-03-15 11:39:28

标签: opengl

在较新的OpenGL规范中,删除了矩阵操作函数。您需要手动计算转换矩阵并将它们传递给着色器。虽然glRotateglScale等消失了,但我没有看到任何交换......

我的问题:

你如何处理变换?您是手工挖掘理论并实施,还是使用一些预定义的库?有没有“官方”的OpenGL解决方案?

例如,datenwolf指向他手工制作的C库in this post。对于Java用户(Android),有AffineTransform类,但它适用于3x3矩阵,因此需要额外的努力才能将其应用于OpenGL mat4

你的解决方案是什么?

3 个答案:

答案 0 :(得分:3)

  

你如何处理变换?您是手工挖掘理论并实施,还是使用一些预定义的库?

无论哪种方式都可以。但事实是:在一个处理3D几何的真实程序中,你需要那些转换矩阵,而不仅仅是渲染东西。假设你有某种物理模拟运行。刚性物体的位置通常由它们的变换矩阵表示。因此,如果进行物理模拟,你无论如何都会在某个地方找到转换矩阵,所以你只需使用它。

在完全集成的模拟引擎中,您还需要避免冗余,因此您需要使用一些物理模拟库,如ODE,Bullet等,并以一种可以直接在表示结构的对象上工作而不复制数据的方式对其进行修改进入库中的特定记录,然后再进行修复。

所以你通常会得到一些混合物。有些数学来自预先存在的库,有些则是你自己实现的。

答案 1 :(得分:3)

我同意datenwolf,但举一个例子,我使用Eigen,这是一个很棒的通用矩阵数学库。

答案 2 :(得分:0)

以上glsl 3.0 glTraslate(),glRotate(),fTransform()等函数已被弃用..但仍然可以使用。

更好的方法是使用一些数学库,如GLM http://glm.g-truc.net/,它与glsl规范兼容。

投影矩阵,模型矩阵和视图矩阵作为统一变量传递给着色器。