首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将VRML4矩阵转换为OpenGL T*R*S

将VRML4矩阵转换为OpenGL T*R*S
EN

Stack Overflow用户
提问于 2012-06-08 04:15:20
回答 3查看 1.6K关注 0票数 2

我正在尝试从一个直接模式的OpenGL程序导出一个场景到VRML.

在OpenGL和VRML中,可以将面分组到对象中,这些对象具有各自相对于场景原点的平移、旋转和缩放。

在OpenGL中,它们被存储为一个4-矩阵,表示一个矩阵[1]中的平移和旋转/缩放。在VRML中,这些必须分别表示为[3]的平移、旋转和缩放向量。

我如何用这种方式分解一个任意的4-矩阵?

我更喜欢使用库函数来做这件事,以最小化我必须维护的代码,并减少出错的机会。我在Windows上使用C#,可以访问任何CLR或windows原生DLL。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-08 04:46:13

看看来自Monogame源码的Matrix.Decompose code

Remember - OpenGL矩阵是列为主的,而DirectX/XNA是行为主的。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-06-08 06:17:11

我如何用这种方式分解一个任意的4-矩阵?

转换的最右边一列是平移向量T

比例和旋转是更复杂的提取。你需要找到旋转轴和旋转角。基本上,您在这里处理的是一个特征向量问题:找到在矩阵变换下不变的向量。这就是特征向量的情况。旋转是正交变换。因此,旋转矩阵的任何非法线部分都是缩放。您可以通过首先对矩阵进行正交归一化来提取这种缩放,从而得到缩放因子S。最后,您可以解决特征向量问题,找到两个反平行的特征向量,它们是旋转轴。相应的特征值指定旋转的cos(),它提供旋转轴和角度R

票数 1
EN

Stack Overflow用户

发布于 2014-10-12 01:01:52

SFMatrix4f/d和SFMatrix3/d内置了分解矩阵的函数。以下是规范中的页面:http://www.web3d.org/documents/specifications/19777-1/V3.0/Part1/functions.html#t-Matrix4Functions

在JavaScript中,您可以键入:

代码语言:javascript
复制
function foo (matrix4f)
{
   var translation = new SFVec3f ();
   var rotation    = new SFRotation ();
   var scale       = new SFVec3f ();

   matrix4f .getTransform (translation, rotation, scale);
}

一些浏览器支持将scaleOrientation和getTransform参数作为第四个和第五个参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10939200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档