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)
,其中 x
和 z
是图块的坐标。
- 3D 世界中的法向量。着色器使用它来计算光照。例如,如果表面垂直于光源,则它会被完全照亮。对于第一个顶点,这是
(0, 1, 0)
,即直接向上。因为表面是平坦的,所以所有的顶点都有相同的法向量。
- 2D 中的纹理坐标 space。该坐标指定映射到该顶点的纹理中的点。对于第一个顶点,这是
(0, 1)
,纹理的左上角;第二个,左下角;第三个,屋顶部分的右上角。
数据类型取决于效果:有些可能使用顶点颜色、更多具有独立坐标的纹理、material 反射率等属性。但是,这在设计着色器和在飞行(例如在本教程中)。如果您使用带有内置 Effect
的 Model
class,框架会处理所有事情。
如果您以前没有使用过 3D 图形,我建议您尝试一下代码:注释掉三个中的任意一组以查看三角形,然后使用位置和纹理坐标。在一张纸上绘制顶点也可能有助于理解代码。
有人可以解释以下代码的作用吗:
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)
,其中x
和z
是图块的坐标。 - 3D 世界中的法向量。着色器使用它来计算光照。例如,如果表面垂直于光源,则它会被完全照亮。对于第一个顶点,这是
(0, 1, 0)
,即直接向上。因为表面是平坦的,所以所有的顶点都有相同的法向量。 - 2D 中的纹理坐标 space。该坐标指定映射到该顶点的纹理中的点。对于第一个顶点,这是
(0, 1)
,纹理的左上角;第二个,左下角;第三个,屋顶部分的右上角。
数据类型取决于效果:有些可能使用顶点颜色、更多具有独立坐标的纹理、material 反射率等属性。但是,这在设计着色器和在飞行(例如在本教程中)。如果您使用带有内置 Effect
的 Model
class,框架会处理所有事情。
如果您以前没有使用过 3D 图形,我建议您尝试一下代码:注释掉三个中的任意一组以查看三角形,然后使用位置和纹理坐标。在一张纸上绘制顶点也可能有助于理解代码。