XNA - VertexPositionNormal 和向量

XNA - VertexPositionNormal & Vectors

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

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.

谢谢。

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

中提交给显卡

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

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

数据类型取决于效果:有些可能使用顶点颜色、更多具有独立坐标的纹理、material 反射率等属性。但是,这在设计着色器和在飞行(例如在本教程中)。如果您使用带有内置 EffectModel class,框架会处理所有事情。

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