我正在对计算机图形学中的作业进行编码,其中我必须对由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空间中顶点的坐标。