Как найти нормальные векторы для каждой вершины треугольника в трехмерном пространстве? - PullRequest
1 голос
/ 14 июня 2019

Я кодирую задание в компьютерной графике, где я должен использовать разные модели освещения (рассеянный, рассеянный) для объекта, состоящего из 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 содержит координаты вершины в трехмерном пространстве.

...