小编Rya*_*s91的帖子

XNA纹理问题

好吧,我最近一直在尝试很多新事物,而且我有一些停止点.我决定离开,因为3D我想我只是没有和无法理解的编码参与,我很擅长数学的,所以我想我会给它一个镜头.

我想学习C#3D XNA,我最近制定了2D,并希望继续前进,我的问题是,随着(在我看来)最基本的三维形状,立方体,我遇到的问题,之后从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();
            }
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

z变化是我可以测试另一种理论.

默认纹理是一种淡淡的纹理,我不确定它是否适合它,因为它几乎是一种纯色,但盒子本身似乎有奇怪的代表(它看起来好像我可以通过近面看到,我看着后面对立的)

我希望有人可以帮助我,它似乎应该更简单然后似乎是,绘制一个简单的纹理立方体,并且大多数在线教程都来自旧版本的XNA,所以代码不匹配,当我尝试用当前代码替换它时,我迷路了(在教程中,在代码中创建一个多维数据集,而不是模型.)

无论如何,谢谢你的答案.

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

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

EDIT3

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

c# xna

6
推荐指数
1
解决办法
1339
查看次数

我应该使用查找列表而不是大量的乘法吗?

在我的应用程序中,我有一个非常大的字节数组,它是一个扁平的3维数组,我们使用3个嵌套for循环(x,y,z)填充数组,然后我们通过使用一点点数学得到我们想要的值,最具体地说:

要获取数组中的索引:

return x + z*SizeX + y*SizeX*SizeZ;
Run Code Online (Sandbox Code Playgroud)

并给出索引返回x/y/z坐标:

int index = pos;
var y = (ushort) (pos/SizeX/SizeZ);
pos -= y*SizeX*SizeZ;
var z = (ushort) (pos/SizeX);
pos -= z*SizeX;
var x = (ushort) pos;

return new BlockPos(x, y, z, index, this);
Run Code Online (Sandbox Code Playgroud)

首先,我会想象第二个可以提高效率,我只是不知道该怎么做,任何帮助都会受到赞赏:P

我的主要问题是,对于我来说,为y和x值创建一个查找表(在加载类时填充)会更快吗?或者将乘法放在那里更快?

编辑 在某些情况下,这个数学被称为很多,所以如果它更快,即使是更长的启动,它也会使差异变得更好.

c# comparison performance lookup-tables multiplication

1
推荐指数
1
解决办法
554
查看次数