Я кодирую задание в компьютерной графике, где я должен использовать разные модели освещения (рассеянный, рассеянный) для объекта, состоящего из N треугольников.Учитывая координаты трех вершин каждого треугольника в трехмерном пространстве, я хочу вычислить нормальные векторы для каждой вершины.
Я попробовал следующий код, используя некоторую помощь, которую нашел при поиске в Интернете, но я действительно не уверен, правильно ли я это делаю.
function Normals = findVertNormals(R, F)
number_of_triangles = length(F);
number_of_vertices = length(R);
A = zeros(3,number_of_triangles);
Normals = zeros(3,number_of_vertices);
for i = 1:number_of_triangles
first_vertex = R(:,F(i,1));
second_vertex = R(:,F(i,2));
third_vertex = R(:,F(i,3));
V = second_vertex - first_vertex ;
W = third_vertex - first_vertex;
N = cross(V,W);
A(:,i) = N ./ norm(N);
end
for i = 1:number_of_triangles
for j = 1:3
Normals(:,F(i,j)) = Normals(:,F(i,j)) + A(:,i);
end
end
Normals = Normals ./ norm(Normals);
end
, где matrix F
описывает, какие вершины образуют каждый треугольник, а матрица R
содержит координаты вершины в трехмерном пространстве.