如何在3D空间中找到三角形每个顶点的法线向量?

时间:2019-06-13 21:08:06

标签: matlab graphics geometry normalization

我正在对计算机图形学中的作业进行编码,其中我必须对由N个三角形组成的对象使用不同的光照模型(环境,扩散,镜面反射)。给定3-D空间中每个三角形的三个顶点的坐标,我想计算每个顶点的法线向量。

我已经尝试使用下面的代码找到一些在线搜索的帮助,但是我不确定自己是否正确执行了此操作。

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

其中矩阵F描述形成每个三角形的顶点,矩阵R包含3-D空间中顶点的坐标。

0 个答案:

没有答案