好的,最近我尝试了很多新事物,但遇到了一些瓶颈。我决定离开3D,因为我认为自己无法理解和编写相关代码。不过,我数学还不错,所以我想再试一次。
我正在尝试学习使用C#编写3D XNA,之前我已经掌握了2D,并希望进一步学习。我的问题是,即使是最基本的3D形状之一——立方体,我也遇到了问题。在将立方体从Blender成功导出(第七次尝试后)并导入XNA后,我无法正确显示纹理贴图,因此我下载了一个来自示例源代码文件的立方体模型,并尝试使用其默认纹理,但仍然遇到了问题。
基本上,绘制立方体的代码如下:
我正在尝试学习使用C#编写3D XNA,之前我已经掌握了2D,并希望进一步学习。我的问题是,即使是最基本的3D形状之一——立方体,我也遇到了问题。在将立方体从Blender成功导出(第七次尝试后)并导入XNA后,我无法正确显示纹理贴图,因此我下载了一个来自示例源代码文件的立方体模型,并尝试使用其默认纹理,但仍然遇到了问题。
基本上,绘制立方体的代码如下:
foreach (ModelMesh mesh in model.Meshes)
{
GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
foreach (BasicEffect effect in mesh.Effects)
{
effect.TextureEnabled = true;
//effect.Texture = texture;
effect.World = world;
effect.View = view;
effect.Projection = projection;
effect.LightingEnabled = false;
}
mesh.Draw();
}
RenderState
和 LightingEnabled
是新的,我试图自己修复它,当我使用自己的纹理时,纹理看起来像被拉伸了一样,并且没有在立方体上显示整个图像,但所有面看起来都是相同的,所以它不是包裹它。
此外,为了看到所有的面,我会像这样旋转立方体:
position -= new Vector3(0, 0.00f, 0.0100f);
angley += 0.01f;
anglez += 0.01f;
world = Matrix.CreateScale(1.5f) * Matrix.CreateRotationZ(anglez) * Matrix.CreateRotationY(angley) * Matrix.CreateTranslation(position);
我更改了z值以测试另一个理论。
默认的纹理是一种沙色的纹理,我不确定它是否被拉伸,因为它几乎是单色的。但是盒子本身似乎被奇怪地表示(看起来我可以看到近面的内部,而且我正在看对面的背面)。
我希望有人能给我帮忙,画一个简单的纹理立方体似乎应该比看起来要简单得多,大多数在线教程都是旧版本的XNA,所以代码不匹配,当我尝试用当前的代码替换时就会迷失方向。(在创建代码而不是模型的教程中创建一个立方体。)
无论如何,感谢任何答案。
编辑1:
使用CreateOrthographic
绘制这个立方体使它看起来正确(第一个使用透视),但仍然没有纹理。
编辑2: 当我使用我的立方体时,它被拉伸了,而当我使用源代码中的立方体时,它是单色的。
编辑3:
如果我提到我正在使用字体/spritebatch
显示FPS,我可能会更快地得到答案。当我试图解决它为什么不起作用,并将其与一个可以工作的示例进行比较时,我发现了它,现在,有人知道如何使它工作吗?