XNA - VertexPositionNormal&矢量

时间:2016-06-09 14:07:14

标签: vector xna game-engine

有人可能会解释以下代码的作用:

int imagesInTexture = 11;
if (floorPlan[x, z] == 0)
{
     verticesList.Add(new VertexPositionNormalTexture(new Vector3(x, 0, -z), new Vector3(0, 1, 0), new Vector2(0, 1)));
     verticesList.Add(new VertexPositionNormalTexture(new Vector3(x, 0, -z - 1), new Vector3(0, 1, 0), new Vector2(0, 0)));
     verticesList.Add(new VertexPositionNormalTexture(new Vector3(x + 1, 0, -z), new Vector3(0, 1, 0), new Vector2(1.0f / imagesInTexture, 1)));

     verticesList.Add(new VertexPositionNormalTexture(new Vector3(x, 0, -z - 1), new Vector3(0, 1, 0), new Vector2(0, 0)));
     verticesList.Add(new VertexPositionNormalTexture(new Vector3(x + 1, 0, -z-1), new Vector3(0, 1, 0), new Vector2(1.0f / imagesInTexture, 0)));
     verticesList.Add(new VertexPositionNormalTexture(new Vector3(x + 1, 0, -z), new Vector3(0, 1, 0), new Vector2(1.0f / imagesInTexture, 1)));
}

以下是本教程: http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2/Loading_the_floorplan.php

如果您想查看我在此处上传的教程附带的纹理贴图,则无法清楚地解释它的作用: Texture Map from Tutorial

感谢。

1 个答案:

答案 0 :(得分:0)

代码创建要绘制的图块。每个图块由两个三角形组成。三角形定义为三个连续顶点。然后将这些三角形提交到顶点缓冲区中的图形卡。

VertexPositionNormalTexture是所使用的Effect所期望的顶点数据的类型,它包含:

    3D世界中的
  • 顶点位置。这是不言自明的。对于第一个顶点,这是(x, 0, -z),其中xz是拼贴的坐标。
  • 3D世界中的
  • 法向量。着色器使用它来计算光照。例如,如果表面垂直于光源,则它完全被点亮。对于第一个顶点,这是(0, 1, 0),即直接向上。所有顶点都具有相同的法向量,因为表面是平的。
  • 2D空间中的
  • 纹理坐标。此坐标指定纹理中映射到此顶点的点。对于第一个顶点,这是纹理的左上角(0, 1);第二个,左下角;第三个是屋顶部分的右上角。

数据的类型取决于效果:有些可能使用顶点颜色,更多纹理具有独立坐标,材质属性如反射率等。但是,这在设计着色器和动态生成几何时很重要(例如在此教程)。如果您将Model类与内置Effect一起使用,则框架将处理所有内容。

如果您以前没有使用3D图形,我建议玩弄代码:注释掉三个一组以查看三角形,然后使用位置和纹理坐标。在一张纸上绘制顶点也可能有助于理解代码。