【问题标题】:Translations with glMultMatrixf, and when to normalize使用 glMultMatrixf 的翻译,以及何时规范化
【发布时间】:2012-04-27 02:11:13
【问题描述】:

所以我可以更好地理解事情,我试图摆脱调用 gl 转换函数(glTranslatef / glRotatef 等),而是创建自己的矩阵并使用 glMultMatrixf()。

我为 x/y/z 旋转创建的矩阵似乎完美无缺,但我的平移矩阵似乎将我的网格的所有顶点折叠成一个轴。

我认为传递矩阵是否偏离了基础:

    { 1.0f,0.0f,0.0f,x
      0.0f,1.0f,0.0f,y,
      0.0f,0.0f,1.0f,z,
      0.0f,0.0f,0.0f,1.0f };

到 glMultMatrixf 和做 glTranslatef(x,y,z) 一样吗? (我是专栏专业的。为了确保我没有完全倒退,我转置了上面的矩阵,但它仍然没有工作。只是似乎把所有东西都压平到不同的轴上。)

我是否在某处缺少规范化步骤?何时对矩阵进行归一化是个好主意。

提前感谢您向我提供一些知识!

这些是我的旋转矩阵: X轴

{ 1.0f, 0.0f, 0.0f, 0.0f,
  0.0f, (float) Math.cos(x), (float) -Math.sin(x), 0.0f,
  0.0f, (float) Math.sin(x), (float) Math.cos(x), 0.0f,
  0.0f, 0.0f, 0.0f, 1.0f }; 

Y轴

{ (float) Math.cos(y),0.0f,(float) Math.sin(y),0.0f,
   0.0f,1.0f,0.0f,0.0f,
  (float) -Math.sin(y),0.0f,(float) Math.cos(y),0.0f,
   0.0f,0.0f,0.0f,1.0f };

Z轴

 { (float) Math.cos(z),(float) -Math.sin(z),0,0,
   (float) Math.sin(z),(float) Math.cos(z),0,0,
   0.0f,0.0f,1.0f,0.0f,
   0.0f,0.0f,0.0f,1.0f };

【问题讨论】:

    标签: android opengl opengl-es-2.0 3d


    【解决方案1】:

    在我看来,这似乎是换位的。元素顺序应该是:

       0   4   8   12
       1   5   9   13
       2   6   10  14
       3   7   11  15
    

    但是你在元素 3 中有 x,它应该是元素 12(y 和 z 相同)。

    ===编辑===

    抱歉,刚刚注意到您已经说过您转置了它。但是 x 绝对应该在元素 12 中,只是为了为您确认。我认为你不必对矩阵做任何额外的事情来让它工作。

    【讨论】:

    • 坚持己见,干得好,当我说我转置它时,我显然是以一种完全疯狂的方式转置它。 (我把 x,y,z 放在索引 1,2 和 3 中:X)
    • 你介意告诉我我的旋转矩阵是否也被千斤顶吗?我的意思是..他们似乎“明显地”工作,但我想与比我(你)更聪明的人核实。我将编辑原始帖子。
    • @MrLeap:您应该可以直接从 glRotate 手册页复制公式:opengl.org/sdk/docs/man/xhtml/glRotate.xml
    • 啊,是的,这比我现在的做法要简洁得多。感谢您的所有帮助蒂姆!如果我有更多的声誉,我也会投票给你:P
    猜你喜欢
    • 2014-04-22
    • 2017-12-29
    • 1970-01-01
    • 2013-08-04
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2019-12-21
    相关资源
    最近更新 更多