C# 模型的XNA方向

C# 模型的XNA方向,c#,xna,C#,Xna,我找不到正确的模型方向。在此项目中,用户加载3个DXF文件 DXF 1是由3dfaces表示的模型 DXF 2是3D多边形,表示相机在左侧行驶时的路径 DXF 3是为迎面而来的交通提供路径的3D多边形 前两个数据集在C#/XNA开发中得到了正确处理。用户可以使用上下键盘键沿道路行驶。但我在第三个过程中失败了。我无法正确判断迎面而来的车辆的方向。位置还可以,每100米一辆货车,但方向不对 最奇怪的是将模型转换到正确位置的常规方法,方向导致模型位于相机顶部!我哪里出错了?我已在以下URL中提供了

我找不到正确的模型方向。在此项目中,用户加载3个DXF文件

  • DXF 1是由3dfaces表示的模型
  • DXF 2是3D多边形,表示相机在左侧行驶时的路径
  • DXF 3是为迎面而来的交通提供路径的3D多边形
前两个数据集在C#/XNA开发中得到了正确处理。用户可以使用上下键盘键沿道路行驶。但我在第三个过程中失败了。我无法正确判断迎面而来的车辆的方向。位置还可以,每100米一辆货车,但方向不对

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

提前谢谢。。凯文

这是最不正确的部分:

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将模型放置在正确的位置,但方向不正确。

您从未设置方向,这意味着您的东西永远不会旋转。根据我的一些代码,这是我如何绘制模型网格的

要点:

  • 您需要包括投影和视图矩阵,并将它们设置为您的效果。您可以在以下代码中执行此操作
  • 需要创建
    方向
    矩阵。有许多方便的函数可以帮助您完成这项工作,如
    Matrix.CreateRotationY
  • 矩阵相乘时要注意顺序。我相信你已经注意到了这一点,但顺序真的很重要。我倾向于把这件事搞砸,摆弄乘法顺序以使事情顺利进行:)

    公共空心图(矩阵投影、矩阵视图)
    {
    //复制任何父变换。
    var transforms=新矩阵[model.Bones.Count];
    model.copyAbsoluteBonetTransformsTo(转换);
    foreach(model.mesh中的var网格)
    {
    //这也是设置网格方向的地方
    //作为我们的相机和投影。
    foreach(网格中的基本效果。效果)
    {
    
    Matrix world=Orientation;//您确实应该在问题中包含代码的相关部分,而不是链接到zip文件。特别是设置汽车矩阵的部分:(……很抱歉,但我认为XNA中有一个基本原则我不明白。开发人员能够发现核心问题的唯一方法是查看整个项目。它仍然很短,很容易查看。整个开发尚未完成。Dervall..你好..你是唯一回应我的问题的人关于不规则三角形的问题。如果你看这段代码,你会发现问题已经解决。三角网现在已经绘制和纹理。我使用Reimers自定义顶点来解决问题。谢谢你的帮助。开发现在几乎完成了。只需解决这个方向问题。应该使用顶点pr设置方向由DXF提供。显然,我是唯一一个尝试回答您所有问题的人。:)好的。我应用了这个。在加载DXF路径上记录了方向。在绘图中使用方向(如回答中提供的)…但所有模型都放置在相机位置。??模型位置是什么?即,您将什么设置为
    世界。翻译
    ?是的世界。使用骨骼变换的翻译会导致模型处于相机位置!?但是…不使用骨骼变换的翻译会将模型放置在正确的位置…非常奇怪…我已经定义了尼特利在代码前面的某个地方犯了一个可怕的错误:(我发现了问题!!!!问题是FBX..模型…它是使用AutoCAD 2012创建的。我刚刚在Blender中创建了一个新模型,并且…现在翻译工作正常!!这个问题可以删除..抱歉!!!@zeppeldep问题不会被删除,除非它们包含严重的问题。以后可能会有人遇到类似的问题你的问题会帮助你。很高兴你找到了解决办法。
    
    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();
        }
    }