【问题标题】:XNA Texturing issueXNA 纹理问题
【发布时间】:2011-02-18 13:51:54
【问题描述】:

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

我正在尝试在 c# 中学习 3d XNA,我最近研究了 2d 并希望继续前进。我的问题是(在我看来)最基本的 3d 形状,立方体,我遇到了问题。从搅拌机成功导出我的立方体后(在第 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 起作用的样本进行比较时,我发现了它,现在,有人知道如何使它起作用吗?

【问题讨论】:

  • 继续使用透视相机。正交视图和透视视图非常不同。透视类似于人眼看世界的方式(许多光线会聚到一个小的视网膜上),而正交视图是如果你有一只非常非常大的眼睛可能看到的世界的方式,(例如,如果你有一个 3 英尺宽的视网膜,用于观察 3 英尺宽的物体)。
  • 我知道,但目前我只是想让任何东西正常工作,当应用程序完成后我希望它使用透视图。
  • 这一次,当我启动应用程序时,我看到立方体上的纹理片刻,然后又消失了。我希望这意味着什么?
  • 我建议买一两本书。 3D 渲染是一个非常复杂的主题。破解你的方式来理解是不可能的。在开始编写代码之前,您必须花时间学习这些原则。尽管 XNA 简化了流程,但它无法简化首先理解技术的需求。
  • 嗯,我得到了数学,当我使用理论对象时,我可以将对象放置在 3d 空间中并整天操纵放置,但它的网格和纹理让我很着迷。天哪,我什至了解矩阵以及如何使用它们>_>,但我无法在屏幕上显示带有纹理的网格:P,我给它一点时间,试图弄清楚如何去做,然后我想就叫它退出.

标签: c# xna


【解决方案1】:

致我自己和遇到此问题的其他人>.

你正在使用:

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

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2014-01-14
    • 2010-12-18
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    相关资源
    最近更新 更多