首页 > 解决方案 > 如何在 3D 空间中找到三角形每个顶点的法线向量?

问题描述

我正在编写计算机图形学中的任务,我必须为由 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 空间中的坐标。

标签: matlabgraphicsgeometrynormalization

解决方案


推荐阅读