См. http://www.opengl -tutorial.org / middle-tutorials / tutorial-13-normal-mapping / для ознакомления с касательной и битовыми касаниями;они также являются дополнительными ссылками внизу, вам нужна дополнительная информация.
Однако ваш вопрос о нормальном.
OBJ - это индексированный формат, с одним индексом для позиций и одним(другой) индекс для нормалей (и т. д. для всех атрибутов).
Итак, если у вас есть такая строка:
f 0/10 1/11 2/12
, у вас есть Лицо, которое является треугольником (3 показателя);индексы позиции 0,1,2 (зависит от вашего файла obj, это описано в заголовке файла).Чтобы получить позиции, индексируйте массив позиций:
vec3 vertexPos1 = positions[0]; // or more generically, positions[faceIndices[i++]]
vec3 vertexPos2 = positions[1];
vec3 vertexPos2 = positions[2];
egdes - это дельты позиций:
vec3 edge1 = vertexPos2 - vertexPos1; // order is important
vec3 edge2 = vertexPos3 - vertexPos1;
normal - это перекрестное произведение этих ребер:
vec3 normal = cross(edge1,edge2); // order important too
normalize(normal);