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