XNA方向的模型

时间:2012-08-31 05:44:42

标签: c# xna

我无法确定模型的方向。在此项目中,用户加载3个DXF文件。

  • DXF 1是3dfaces代表的模型。
  • DXF 2是表示相机在左侧行驶的路径的3dpoly。
  • DXF 3是3dpoly,为即将到来的流量提供路径。

前两个数据集在C#/ XNA开发中正确处理。用户可以使用上下键盘键沿着道路行驶。但是我在第三个过程中失败了。我无法确定迎面而来的交通方向。位置还可以,每100米一辆面包车,但方向错误。

最奇怪的是将模型转换到正确位置和方向的常规方法是使模型位于相机顶部!我哪里做错了?我已经在以下URL中提供了源代码,因此您可以查看代码并查看我出错的地方(zip包含用于测试的DXF文件):

http://www.4shared.com/zip/Lk3xmCtO

提前致谢..凯文。

这是最不正确的部分:

Matrix worldMatrix = Matrix.CreateTranslation(VanPos[vi]);
Matrix[] transforms = new Matrix[Van.Bones.Count];
Van.CopyAbsoluteBoneTransformsTo(transforms);
foreach (ModelMesh modmesh in Van.Meshes)
{
foreach (BasicEffect be1 in modmesh.Effects)
{
    be1.World = transforms[modmesh.ParentBone.Index] * worldMatrix;

这导致模型被放置在摄像机位置。 仅使用CreateTranslation将模型放置在正确的位置,但方向不正确。

1 个答案:

答案 0 :(得分:1)

您永远不会设置方向,这意味着您的东西永远不会旋转。从我放置的一些代码中,这就是我绘制模型网格的方法。

关键点:

  • 您需要包含投影和视图矩阵并将其设置为效果。您可以在以下代码中执行此操作。
  • 需要创建Orientation矩阵。有许多便利功能可以帮助您完成此操作,例如Matrix.CreateRotationY
  • 在乘法矩阵时要小心排序。我相信你已经注意到这一点,但订单真的很重要。我倾向于搞砸了这个,并用乘法顺序来调整以使事情有效:)

    public void Draw(Matrix projection, Matrix view)
    {
        // Copy any parent transforms.
        var transforms = new Matrix[model.Bones.Count];
        model.CopyAbsoluteBoneTransformsTo(transforms);
    
        foreach (var mesh in model.Meshes)
        {
            // This is where the mesh orientation is set, as well 
            // as our camera and projection.
            foreach (BasicEffect effect in mesh.Effects)
            {
                Matrix world = Orientation; // <- A Matrix that is the orientation
                world.Translation = Position; // <- A Vector3D representing position
                effect.World = transforms[mesh.ParentBone.Index] *
                    world;
    
                effect.View = view;
                effect.Projection = projection;
            }
            // Draw the mesh, using the effects set above.
            mesh.Draw();
        }
    }