XNA纹理问题

时间:2011-02-18 13:51:55

标签: c# xna

好的,我最近一直在尝试很多新事物,而且我有一些停止点。我决定离开3d,因为我认为我只是没有,也无法理解所涉及的编码,但我很擅长数学,所以我想我会再给它一次。

我正在尝试用c#学习3d XNA,我最近研究了2d并希望继续前进,我的问题是(在我看来)最基本的3d形状,一个立方体,我遇到问题,成功地从blender导出我的立方体(在第7次尝试> _>之后)并将其导入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,所以代码没有匹配,我试图用当前代码替换它时迷路了(在教程中,在代码中创建一个多维数据集,而不是模型。)

无论如何,谢谢你的回答。

EDIT 使用CreateOrthographic绘制此立方体使其看起来正确(第一个使用透视)但仍然没有纹理爱:(

EDIT2 当我使用我的立方体时它被拉伸,当我使用来自源的那个时,它是一个纯色。

EDIT3

如果我提到我正在使用字体/ spritebatch显示FPS,我可能会早点得到答案,当我找出它为什么不起作用,并将它与DID工作的样本进行比较时,我发现它,现在,有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:6)

对我自己以及其他遇到此问题的人>。<

您使用的是:

SpriteBatch.begin()

在您的代码中执行任何操作?如果是这样,这搞砸了程序在3d中渲染的方式,请查看此链接(对于pre XNA 4.0):

http://blogs.msdn.com/b/shawnhar/archive/2006/11/13/spritebatch-and-renderstates.aspx

如果您使用XNA 4.0,请使用此链接:

http://blogs.msdn.com/b/shawnhar/archive/2010/06/18/spritebatch-and-renderstates-in-xna-game-studio-4-0.aspx

解决此问题的特别是:

GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;

在foreach循环之前添加,为我修复了这个问题,但你可能需要尝试那篇文章中的其他内容

对于其他读这篇文章的人来说,祝你的XNA梦想好运:D