问题描述
我最近开始学习计算机图形学,我需要一些帮助。
我正在尝试复制“棒”围绕圆形路径的旋转方式,使棒始终与路径相切。我提供了一张图片来帮助说明所需的行为:
我尝试了一些方法,但从未成功。在我最近一次测试的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);
XMMATRIX mOrbit2 = mOrbit;
XMMATRIX mdistance2 = XMMatrixTranslation(2.0f,0.0f);
XMMATRIX mPosition2 = XMMatrixTranslation(2.0f,0.0f);
g_World2 = mScale2 * mdistance2 * mOrbit2 * mPosition2;
更新:
重现此步骤:
a)下载项目Direct3D11Tutorials
b)打开教程5
c)找到两个多维数据集的“世界矩阵”,并用本文中提到的矩阵替换它们。
谢谢!
解决方法
我可以通过平移操纵杆的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;
结果:
如果有人有另一种更好的方法,请让我知道。