gpt4 book ai didi

c++ - 将已经围绕另一个枢轴变换的 GL 对象的枢轴居中?

转载 作者:太空狗 更新时间:2023-10-29 21:20:16 26 4
gpt4 key购买 nike

我正在寻找使用 openGL 着色器在对象上居中和偏移旋转轴心的最佳方法。 3d 应用在处理此问题的方式上存在差异。


我有一个对象,我将平移设置为 (0,2,2),将旋转设置为 (90,0,0) 并将轴心移动到 (5,2,0),然后旋转(或不旋转) 任意。然后我想将对象上的“中心轴”定位到翻译后的 bb 中心

在 pivRT 与 BBcenter 不同的所有情况下,我都尝试了此 modelMatrix 的变体但没有成功:modelM = translationM * pivRT * glm::inverse(pivotM) * rotationM * scaleM * pivotM;

在玛雅

我将对象“居中”并且用户可见的值没有变化。在 blender 等其他应用程序中,当您将枢轴居中时,翻译会发生变化 - 实际上,您的对象翻译会成为枢轴翻译。在 xform 中阅读有关其工作原理的信息命令或 MTransformationMatrix类,Maya 的变换矩阵为

[Sp]x[S]x[Sh]x[Sp]x[St]x[Rp]x[Ro]x[R]x[Rp]x[Rt]x[T]

with Rt being the "Rotate pivot translation" matrix which is translation introduced to preserve exisiting rotate transformations when moving pivot. This is used to prevent the object from moving when the objects pivot point is not at the origin and the pivot is moved. [Rt]

我相信这个旋转枢轴平移矩阵可以工作,并且比在平移值发生变化的搅拌器中更直观,但我在实现这两个矩阵时都遇到了麻烦。

最佳答案

如果我正确地按照你的例子,这将是如何:

  1. 将枢轴移动到 (5,2,0)
  2. 围绕新轴旋转对象(假设围绕 z 轴旋转 2 弧度)
  3. 将枢轴重新置于对象上
  4. 将对象绕 x 轴旋转 90 度(围绕新的居中枢轴)
  5. 将对象翻译成 (0,2,2)

对于 glm,这将是模型矩阵的代码:

glm::mat4 Step1 = glm::translate(glm::mat4(1.0), glm::vec3(5,2,0));
glm::mat4 Step2 = glm::rotate(Step1, 2.0, glm::vec3(0,0,1));
glm::mat4 Step3 = glm::translate(Step2, glm::vec3(-5,-2,0));
glm::mat4 Step4 = glm::rotate(Step3, 1.57, glm::vec3(1,0,0));
glm::mat4 Step5 = glm::translate(Step4, glm::vec3(0,2,2) + glm::vec3(5,2,0));

列表中的第 3 步在技术上分为两部分:在第二次旋转之前翻译对象,然后在最后的翻译步骤中再次将其翻译回来。

关于c++ - 将已经围绕另一个枢轴变换的 GL 对象的枢轴居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com