Получить края из нормального вектора - PullRequest
0 голосов
/ 05 июня 2011

Я читаю файл Wavefront .obj, в котором содержатся нормальные значения. И я хочу вычислить касательную вручную.

Можно ли как-нибудь получить ребра edge1 и edge2, которые создают вектор нормали?

Ответы [ 2 ]

3 голосов
/ 05 июня 2011

Если у вас есть один вектор нормали, существует бесконечное количество вариантов для двух перпендикулярных ребер - любая комбинация векторов, чье перекрестное произведение дает вам этот вектор нормали.

Вам нужно ограничить свой вопрос, решив, в каком направлении вы хотите, чтобы ваш касательный вектор (ы) шел.Это http://support.microsoft.com/kb/131130 может помочь вам вернуться туда.HTH,

0 голосов
/ 09 июня 2011

См. 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...