Нормалы на индекс? - PullRequest
       3

Нормалы на индекс?

0 голосов
/ 03 января 2011

У меня есть пирамида, которая имеет 5 вершин и 18 индексов.Поскольку я хочу добавить нормали к каждой грани, я только что нашел решение для нормалей для каждой вершины.Это означает, что я не могу использовать индексы для определения своей пирамиды. Мне нужно иметь 18 вершин (и 3 раза одну и ту же вершину для одной и той же точки в пространстве).

Должно быть решение для использования нормалей не на вершинебаза, но на основе индекса.

Некоторый код (JavaScript):

var vertices = [
    -half, -half,  half, // 0 front left
     half, -half,  half, // 1 front right
     half, -half, -half, // 2 back right
    -half, -half, -half, // 3 back left
      0.0,  Math.sqrt((size * size) - (2 * (half * half))) - half,   0.0  // 4 top
];

var vertexNormals = [
    // front face
     normaleFront[0],  normaleFront[1],  normaleFront[2],
     normaleFront[0],  normaleFront[1],  normaleFront[2],
     normaleFront[0],  normaleFront[1],  normaleFront[2],

    // back face
     normaleBack[0],  normaleBack[1],  normaleBack[2],
     normaleBack[0],  normaleBack[1],  normaleBack[2],
     normaleBack[0],  normaleBack[1],  normaleBack[2],

    // left face
     normaleLeft[0],  normaleLeft[1],  normaleLeft[2],
     normaleLeft[0],  normaleLeft[1],  normaleLeft[2],
     normaleLeft[0],  normaleLeft[1],  normaleLeft[2],

    // right face
     normaleRight[0],  normaleRight[1],  normaleRight[2],
     normaleRight[0],  normaleRight[1],  normaleRight[2],
     normaleRight[0],  normaleRight[1],  normaleRight[2],

    // bottom face
     0.0, -1.0, 0.0,
     0.0, -1.0, 0.0,
     0.0, -1.0, 0.0,
     0.0, -1.0, 0.0,
     0.0, -1.0, 0.0,
     0.0, -1.0, 0.0,
];

var pyramidVertexIndices = [
    0, 1, 4, // Front face
    2, 3, 4, // Back face
    3, 0, 4, // Left face
    1, 2, 4, // Right face
    0, 1, 2,   2, 3, 0, // Bottom face
];

1 Ответ

1 голос
/ 03 января 2011

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

В качестве альтернативы вы можете позвонить // Face 1 glNormal glVertex glVertex glVertex</p> <p>// Face 2 glNormal glVertex glVertex glVertex</p> <p>// ...

...