XNA纹理问题

问题描述 投票:6回答:1

好吧,最近我一直在尝试很多新事物,而且我有一些停滞点。我决定离开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();
}

RenderStateLightingEnabled是新的,试图自己修复,当我使用自己的纹理时,该纹理看起来像是在拉伸,并且没有在立方体上显示整个图像,但是所有面孔看起来相同,因此没有包装它。

另外,要查看所有的面孔,我将旋转立方体,如:

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,我可能会早早得到答案。当我弄清楚为什么它不起作用并将它与DID可以工作的示例进行比较时,我发现了,现在,有人知道如何使它起作用吗?

c# xna
1个回答
6
投票

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

您在使用:

SpriteBatch.begin()

要在您的代码中执行任何操作?如果是这样的话,这可能会破坏程序在3d中的呈现方式,请查看此链接(对于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

© www.soinside.com 2019 - 2024. All rights reserved.