【发布时间】:2013-01-30 04:23:34
【问题描述】:
如何在 XNA 中找到模型内部网格的矢量 3 位置(在全局坐标中)?
我在搅拌机中制作了一个简单的灯柱模型。灯光应该在的位置,我将单个顶点作为自己的对象并将其命名为“灯光”,在位置,典型的灯光将位于灯柱中.
在我的 XNA 程序中,我想在模型的位置放置一个浮点光。我可以按名称找到网格。但需要“Light”网格的 Vector3 位置 来完成。
【问题讨论】:
如何在 XNA 中找到模型内部网格的矢量 3 位置(在全局坐标中)?
我在搅拌机中制作了一个简单的灯柱模型。灯光应该在的位置,我将单个顶点作为自己的对象并将其命名为“灯光”,在位置,典型的灯光将位于灯柱中.
在我的 XNA 程序中,我想在模型的位置放置一个浮点光。我可以按名称找到网格。但需要“Light”网格的 Vector3 位置 来完成。
【问题讨论】:
这取决于如何根据网格/骨骼层次设置模型。最终,您将光(灯泡)矩阵与其父级相乘,父级首先乘以其父级,以此类推一直到根,然后获取结果的平移属性。有一个内置方法可以做到这一点,称为 Model.CopyAbsoluteBoneTransformsTo(Matrix[])
Matrix[] transforms = new Matrix[SimpleLampPostModel.Bones.Count];
SimpleLampPostModel.CopyAbsoluteBoneTransformsTo(transforms);
Vector3 lightPosition = transforms[SimpleLampPostModel.Meshes["light"].parentBone.Index].Translation;
lightPosition += modelWorld.Translation;// if the model is located in some arbitrary location in your 3d
// world as represented by a world matrix (modelWorld)
【讨论】: