转换层次结构 - 将 parent 的方向应用于其 children
Transformation Hierarchy - applying a parent's orientation to its children
我的目标:
- 渲染时,child object需要相对于parent进行渲染;因此它自己的位置和方向需要相对于它的 parent
我的问题:
- 翻译有效,但 parent 的 rotation/orientation 没有正确添加到 child 的转换计算中; child 可以很好地按照自己的方向旋转,但是当添加 parent 的方向时,child 的计算顶点旋转 两倍
我的做法:
- 在我的顶点着色器中计算 gl_Position 时,我将我的 mvpMatrix、object 顶点、object 位置、object 方向、parent 传递给着色器位置和 parent 方向。
在着色器中,我定义了用于保存四元数的结构,以及通过四元数旋转向量的方法,它们自己工作当我自己旋转 object 时。
gl_Position = mvpMatrix * (vec4(parentPosition,1) + rotVertexByQuaternion(parentOrientation, vec4(objectPosition,1) + rotVertexByQuaternion(objectOrientation,vertex) ) );
这是一张描述我的目标和我得到的图片。我在此示例中省略了添加 parents 位置,因为它是 0,0,0,但无论如何它都会最后完成。
我为 child object 标记了 1 个顶点绿色,并在整个过程中对其进行了跟踪,以便可以跟踪旋转。此外,我计算中的当前步骤显示在每个面板下方。
显然我还有一些遗留的旧代码,按照@ratchet freak 的建议,在着色器之外对父项的所有子项应用手动方向更改
我以为这只是数学不好导致的巧合,但事实证明它实际上是父方向的完整 double 旋转。
因此,通过删除这些代码行来解决问题,这样我 post 在开头 post 编辑的代码就可以正常工作了。
此外,显然我的实现不太理想,相反我应该学习如何创建一个合适的模型矩阵,但现在这个问题在技术上已经解决了。
我的目标:
- 渲染时,child object需要相对于parent进行渲染;因此它自己的位置和方向需要相对于它的 parent
我的问题:
- 翻译有效,但 parent 的 rotation/orientation 没有正确添加到 child 的转换计算中; child 可以很好地按照自己的方向旋转,但是当添加 parent 的方向时,child 的计算顶点旋转 两倍
我的做法:
- 在我的顶点着色器中计算 gl_Position 时,我将我的 mvpMatrix、object 顶点、object 位置、object 方向、parent 传递给着色器位置和 parent 方向。
在着色器中,我定义了用于保存四元数的结构,以及通过四元数旋转向量的方法,它们自己工作当我自己旋转 object 时。
gl_Position = mvpMatrix * (vec4(parentPosition,1) + rotVertexByQuaternion(parentOrientation, vec4(objectPosition,1) + rotVertexByQuaternion(objectOrientation,vertex) ) );
这是一张描述我的目标和我得到的图片。我在此示例中省略了添加 parents 位置,因为它是 0,0,0,但无论如何它都会最后完成。
我为 child object 标记了 1 个顶点绿色,并在整个过程中对其进行了跟踪,以便可以跟踪旋转。此外,我计算中的当前步骤显示在每个面板下方。
显然我还有一些遗留的旧代码,按照@ratchet freak 的建议,在着色器之外对父项的所有子项应用手动方向更改 我以为这只是数学不好导致的巧合,但事实证明它实际上是父方向的完整 double 旋转。
因此,通过删除这些代码行来解决问题,这样我 post 在开头 post 编辑的代码就可以正常工作了。
此外,显然我的实现不太理想,相反我应该学习如何创建一个合适的模型矩阵,但现在这个问题在技术上已经解决了。