1

我从 Blender 生成了 Cube 到 .obj 文件。Like this: o Cube_Cube.001
v -1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 1.000000 -1.000000

v v
-1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000来1.000000
vn 0.000000 0.000000 -1.000000
vn 1.000000 0.000000 0.000000
vn 0.000000 0.000000 1.000000
vn -1.000000 0.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 1.000000 0.000000
usemtl None
s off
f 5//1 6//1 1//1
f 6//2 7//2 2//2
f 7//3 8//3 3//3
f 8//4 5//4 4//4
f 1//5 2//5 4//5
f 8//6 7//6 5//6
f 6//1 2//1 1/ /1
f 7//2 3//2 2//2
f 8//3 4//3 3//3
f 5//4 1//4 4//4
f 2//5 3//5 4//5
f 7//6 6//6 5//6

我逐行加载顶点并将它们存储在数组中。然后索引(我想以'f'开头的行)存储到索引数组中,例如 {4, 5, 0, 6, 7 ...} (由于数组中顶点的位置而减少1)然后创建数组顶点位置颜色。

但是当我绘制图元时,立方体会发生奇怪的变形。绘制方法:

GraphicsDevice.Clear(Color.CornflowerBlue);
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
effect.World = world;
effect.View = view;
effect.Projection = projection;
effect.VertexColorEnabled = true;
RasterizerState rs = new RasterizerState();
rs.CullMode = CullMode.None;
rs.FillMode = FillMode.WireFrame;
GraphicsDevice.RasterizerState = rs;
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
   pass.Apply();
   GraphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, model.VertexPositionColors, 0, model.VertexPositionColors.Length, model.Indicies, 0, model.Indicies.Length / 3, model.VertexDeclarations);
}

输出 http://i.imgur.com/3pLj0U9.png

[解决方案] 检查您的导入算法生成的内容。由于迭代不好,我的索引搞砸了。我的错 :)

4

1 回答 1

1

我会推荐使用 FBX 和标准的 XNA 内容导入系统。这简化了流程,因此您甚至不必编写导入器;您只需将 XNA 指向您的内容,就可以用很少的非常简单的命令来绘制它。自己编写一个导入器是一个很好的练习,但在 XNA 平台上则没有必要。

于 2013-11-10T20:55:56.137 回答