使用 aTan2 将对象面向其目标
Using aTan2 to face an object to its destination
我创建了一个以惯性向目的地移动的对象。我在让物体面对目的地时遇到了很多麻烦。我的代码很简单,它计算角度,将其转换为度数并将该角度传递给 Matrix4 旋转函数,该函数调整 localTransform(场景图)。
问题是对象生成,然后无休止地旋转。它慢慢地向目标前进,但只是继续旋转。我已经在没有翻译的情况下对其进行了测试,无论现场如何,它都会旋转。我所需要的只是让物体面对它的目的地。我的平移/旋转函数工作正常,我用它来旋转对象,让对象在其父对象的旋转下生成并朝那个方向前进。它们通过 GLM 库提供 1:1 的结果。
我尝试在 aTan2 中交换顺序,删除度数转换(尽管这什么也不做,旋转函数需要度数)并交换平移/旋转顺序。
localTransform 是组合的旋转/缩放/平移矩阵。 row[3]列[1] 是 Y。 [3][0] 是 X。
float fAngle = atan2(v3Destination[1] - localTransform.data[3][1] , v3Destination[0] - localTransform.data[3][0]);
float fAngleDegrees = fAngle * 180 / PI;
localTransform = Matrix4::Rotate(localTransform, fAngleDegrees, Vector3(0.0f, 0.0f, 1.0f));
Vector3 Movement;
Movement[0] = v3Destination[0] - localTransform.data[3][0];
Movement[1] = v3Destination[1] - localTransform.data[3][1];
Movement = Movement * fSpeed * Application.GetTimeStep();
localTransform = Matrix4::Translate(localTransform, Movement);
关于如何处理这个问题的任何建议?这一切都在 2D 坐标中,但是旋转是在 Z 轴上完成的。
只是一种预感,但是每个时间步长都完全重新计算了localTransform矩阵吗?
或者,您可以向在上一次迭代中已经旋转的矩阵添加旋转。
这可以解释连续旋转。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- Opengl 3/4 : 我可以将相同的缓冲区对象绑定到不同的目标吗?
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 在对象库中包含 CMake 目标的标头
- 如果目标对象死亡,Qt::BlockingQueuedConnection发射会发生什么
- 将自定义对象作为参数从目标 C 传递到 C++
- 多个子目录中对象文件的通用makefile目标
- 为什么不能重新分配引用的目标对象?
- Qt C++:如何获取事件目标对象
- 更改函数中指针的目标(指向动态创建的对象)
- 使用 aTan2 将对象面向其目标
- 正在从常量指针参数的目标复制对象以供临时使用
- 目标C "autorelease" C++ -- 控制对象生存期的标准方法?
- 序列化指针本身而不是目标对象
- 如何动态访问函数对象的目标
- 如果我在管理C++对象内存的目标 C 中混合C++代码,ARC 会处理它