Render.ru

Как вычислить нормаль к вертексу?

Евгений Цымбалов

Пользователь сайта
Рейтинг
2
#1
Друзья, есть вопрос.

Есть библиотека 3d, простенькая. В ней есть функция - грузишь модель, представлющую собой массив, состоящий из вершин, индексов граней, нормалей и цвета, она эту модель отрисовывает.

Массив я создал - забил в него вертексы, назначил их граням, в режиме Wireframe рисует отлично. Хочу теперь запустить имеющуюся функцию отрисовки в режиме Flat и Gouraud.

Для этого в массив к каждому вертексу нужно добавить нормали. Именно к вертексу, а не к грани. ДЛя вычисления нормали к грани там есть своя функция, но для этого в нее нужно ввести нормали вертексов.

float32_t vertex_norm_a[3];
float32_t vertex_norm_b[3];
float32_t vertex_norm_c[3];
..............................
vertex_norm_a[0] = dsp3dModel[2 + b * 6 + 3]; // нормаль задается 3 числами
vertex_norm_a[1] = dsp3dModel[2 + b * 6 + 4];// заранее, при создании модели
vertex_norm_a[2] = dsp3dModel[2 + b * 6 + 5];// забитыми в массив


------------------------
// а потом вычисляется нормаль к грани
dsp3D_calculateFaceNormal(vertex_norm_a, vertex_norm_b, vertex_norm_c, matrix_worldView, face_norm);

А как вычислить нормали к вертексам?

Подвопрос: задает ли вершина нормаль? Или для ее расчета необходимы данные о всех трех ребрах, образующих грань?

P.S. Попытался в Blender создать куб, сохранить и посмотреть в сохраненный файл, но в него записались уже вычисленные нормали граней, а по вертексам данных нет.

Добавлено через 58 секунд
Вот эта библиотека, если что https://github.com/FabioRM/dsp3D/blob/master/src/dsp3D.c
 
Сверху