2016-06-09 4 views
0

Может кто-то, возможно, объяснить, что делает следующий код:XNA - VertexPositionNormal и векторы

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.

Спасибо.

+0

Не могли бы вы быть более конкретными о том, с чем вы столкнулись. Есть ли часть кода, который вы не понимаете? (например, координаты текстуры или позиция Vector3), или вы даже не знаете, что этот код пытается выполнить? –

+0

«Вы даже не знаете, что этот код пытается выполнить?» Последний полностью. – F1R3

ответ

0

Код создает плитки для рисования. Каждая плитка состоит из двух треугольников. Треугольники определяются как три последовательные вершины. Затем эти треугольники передаются на графическую карту в буфер vertex.

VertexPositionNormalTexture является тип данных вершин, ожидаемых Effect используется, и он содержит:

  • Vertex позиция в 3D мире. Это совершенно понятно. Для первой вершины это (x, 0, -z), где x и z - это координаты плитки.
  • Обычный вектор в 3D мире. Это используется шейдером для расчета освещения. Например, если поверхность перпендикулярна источнику света, она полностью освещена. Для первой вершины это (0, 1, 0), то есть непосредственно вверх. Все вершины имеют один и тот же нормальный вектор, так как поверхность плоская.
  • Координата изображения в 2D пространстве. Эта координата определяет точку в текстуре, которая сопоставляется с этой вершиной. Для первой вершины это (0, 1), верхний левый угол текстуры; для второго - нижний левый угол; для третьей - верхнюю правую точку в крыше.

Тип данных зависит от эффекта: некоторые из них могут использовать цвета вершин, больше текстур с независимыми координатами, свойств материалов, таких как отражательную способность, и т.д. Однако, это имеет значение в основном при проектировании шейдеров и генерации геометрии на лету (например как в этом уроке). Если вы используете класс Model со встроенным Effect, все позаботится об этом.

Если вы еще не работали с 3D-графикой, я предлагаю вам поиграть с кодом: прокомментируйте любую из трех групп, чтобы увидеть треугольники, затем играйте с координатами позиции и текстуры. Построение вершин на листе бумаги также может помочь понять код.

+0

Спасибо большое. – F1R3

 Смежные вопросы

  • Нет связанных вопросов^_^