如何旋转始终与圆形路径相切的对象?
How to rotate an object always tangent to a circular path?
我最近开始学习计算机图形学,需要一些帮助。
我正在尝试以一种始终与路径相切的方式重现“棒”围绕圆形路径的旋转。我提供了一张图片来帮助说明所需的行为:
我尝试了一些方法,但从未成功过。下面是我最近测试的 gif 动图,其中小立方体代表棒应该绕着旋转但与路径相切的圆形路径。
我应用于对象世界矩阵的变换:
XMMATRIX mScale = XMMatrixScaling(0.3f, 0.3f, 0.3f);
XMMATRIX mOrbit = XMMatrixRotationY(-t * 2.0f);
XMMATRIX mDistance = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
g_World1 = mScale * mDistance * mOrbit;
XMMATRIX mScale2 = XMMatrixScaling(4.0f, 0.3f, 0.3f);
XMMATRIX mOrbit2 = mOrbit;
XMMATRIX mDistance2 = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
XMMATRIX mPosition2 = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
g_World2 = mScale2 * mDistance2 * mOrbit2 * mPosition2;
你能帮我解决一下 directions/hints 我应该寻找什么来解决这个问题吗?
更新:
重现此步骤的步骤:
a) 下载项目Direct3D11Tutorials
b) 打开教程 5
c) 求出两个立方体的“世界矩阵”,用本post.
中提到的矩阵替换
谢谢!
我可以通过转换操纵杆的 Z 坐标而不是 X 来重现我想要的行为:
//small cube as reference
XMMATRIX mScale = XMMatrixScaling(0.1f, 0.1f, 0.1f);
g_World1 = mScale;
//stick rotating around the small cube
XMMATRIX mScale2 = XMMatrixScaling(3.0f, 0.3f, 0.3f);
XMMATRIX mOrbit2 = XMMatrixRotationY(-t * 2.0f);
XMMATRIX mDistance2 = XMMatrixTranslation(0.0f, 0.0f, 3.0f);
g_World2 = mScale2 * mDistance2 * mOrbit2;
结果:
如果有人有其他更好的方法,请告诉我。
我最近开始学习计算机图形学,需要一些帮助。
我正在尝试以一种始终与路径相切的方式重现“棒”围绕圆形路径的旋转。我提供了一张图片来帮助说明所需的行为:
我尝试了一些方法,但从未成功过。下面是我最近测试的 gif 动图,其中小立方体代表棒应该绕着旋转但与路径相切的圆形路径。
我应用于对象世界矩阵的变换:
XMMATRIX mScale = XMMatrixScaling(0.3f, 0.3f, 0.3f);
XMMATRIX mOrbit = XMMatrixRotationY(-t * 2.0f);
XMMATRIX mDistance = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
g_World1 = mScale * mDistance * mOrbit;
XMMATRIX mScale2 = XMMatrixScaling(4.0f, 0.3f, 0.3f);
XMMATRIX mOrbit2 = mOrbit;
XMMATRIX mDistance2 = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
XMMATRIX mPosition2 = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
g_World2 = mScale2 * mDistance2 * mOrbit2 * mPosition2;
你能帮我解决一下 directions/hints 我应该寻找什么来解决这个问题吗?
更新:
重现此步骤的步骤:
a) 下载项目Direct3D11Tutorials
b) 打开教程 5
c) 求出两个立方体的“世界矩阵”,用本post.
谢谢!
我可以通过转换操纵杆的 Z 坐标而不是 X 来重现我想要的行为:
//small cube as reference
XMMATRIX mScale = XMMatrixScaling(0.1f, 0.1f, 0.1f);
g_World1 = mScale;
//stick rotating around the small cube
XMMATRIX mScale2 = XMMatrixScaling(3.0f, 0.3f, 0.3f);
XMMATRIX mOrbit2 = XMMatrixRotationY(-t * 2.0f);
XMMATRIX mDistance2 = XMMatrixTranslation(0.0f, 0.0f, 3.0f);
g_World2 = mScale2 * mDistance2 * mOrbit2;
结果:
如果有人有其他更好的方法,请告诉我。