Каковы нормы для 3d-куба, используемого в OpenGL ES? - PullRequest
6 голосов
/ 10 февраля 2011

У меня есть куб, определенный как:

  float vertices[] = {
            //Vertices according to faces
                -1.0f, -1.0f, 1.0f, //Vertex 0
                1.0f, -1.0f, 1.0f,  //v1
                -1.0f, 1.0f, 1.0f,  //v2
                1.0f, 1.0f, 1.0f,   //v3

                1.0f, -1.0f, 1.0f,  //...
                1.0f, -1.0f, -1.0f,         
                1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, -1.0f,

                1.0f, -1.0f, -1.0f,
                -1.0f, -1.0f, -1.0f,            
                1.0f, 1.0f, -1.0f,
                -1.0f, 1.0f, -1.0f,

                -1.0f, -1.0f, -1.0f,
                -1.0f, -1.0f, 1.0f,         
                -1.0f, 1.0f, -1.0f,
                -1.0f, 1.0f, 1.0f,

                -1.0f, -1.0f, -1.0f,
                1.0f, -1.0f, -1.0f,         
                -1.0f, -1.0f, 1.0f,
                1.0f, -1.0f, 1.0f,

                -1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,           
                -1.0f, 1.0f, -1.0f,
                1.0f, 1.0f, -1.0f,
                                    };

Каковы нормальные значения для этого куба?Мне нужны фактические значения для нормалей.

Нужно ли нам 6 или 12 нормалей?Поскольку OpenGL ES использует только треугольники, это означает, что нам нужно 12 нормалей, но я могу ошибаться.

Ответы [ 2 ]

13 голосов
/ 10 февраля 2011

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

Вместо этого вам нужно будет указать 24 вершины, чтобы каждая грань куба рисовалась без разделения вершин с другими.

Что касается ценностей, это очень просто. Если мы предположим, что x увеличивается вправо, y увеличивается с ростом, а z увеличивается при движении вперед, нормаль для правой части равна (1, 0, 0), слева - (-1, 0, 0), верхняя сторона (0,1,0) и т. Д. И т. Д.

Подводя итог: не рисуйте куб, нарисуйте 6 квадов, которые, как оказалось, имеют совпадающие вершины

4 голосов
/ 10 февраля 2011

Нормаль поверхности - это просто вектор направления.Поскольку нормали будут одинаковыми для двух поверхностей, которые находятся в одной плоскости, вам потребуется только 6 нормалей поверхности.Однако часто бывает так, что нормали должны быть определены на вершину , и в этом случае вам потребуется 36 (по одному на каждую вершину каждого треугольника на каждой грани куба).

Чтобы вычислить нормали, просто используйте следующий расчет: http://www.opengl.org/wiki/Calculating_a_Surface_Normal

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...