matlab - 如何在 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 空间中的坐标。
解决方案
推荐阅读
- javascript - 在 jQuery 中定义时间?
- c# - ASP.NET Core WEB Api 连接到 JS
- react-native-android - 我该如何解决“可能的未处理承诺拒绝(id:0)”?
- django - Django 3 - 过滤中的 ORM“AND”逻辑
- python - WandB - 为什么图表中的“步骤”刻度与给定的计算方式不同?(Python)
- java - 为什么 WebFlux-WebClient 超时不起作用?
- python - python - 在代码中替换 pd.rolling_apply
- javascript - 外部 javascript 文件在 HTML 文件中不起作用
- javascript - 函数 setTimeout 在 heroku 上不起作用
- mysql - django.db.utils.OperationalError: (1044, "Access denied for user to database) when have permissions