查找视图矢量和曲面法线之间的角度可以有利于获取可见曲面,因为我们使用它来进行背面剔除技术并获得轮廓,折痕对象的边缘。
为了获得可见表面,我使用下面的背面剔除代码:
N = normals(vertex,faces);
BC = barycenter(vertex,faces);
back_facing = sum(N.*bsxfun(@minus,BC,campos),2)<=0
t.FaceVertexCData = 1*(sum(N.*bsxfun(@minus,BC,campos),2)<=0)
t.FaceVertexCData(sum(N.*bsxfun(@minus,BC,campos),2)>0) = nan;
faces1=faces(t.FaceVertexCData(:)==1,:);
facesv=sort(unique(faces1(:)));
如何获得角度?
r=(sum(N.*bsxfun(@minus,BC,campos),2))
rr=bsxfun(@minus,BC,campos);
V_mag= sqrt(rr(:,1).^2+rr(:,2).^2+rr(:,3).^2);
N_mag= sqrt(N(:,1).^2+N(:,2).^2+N(:,3).^2);
for i = 1:(size(r,1))
A(i)=acosd(r(i)/(N_mag(i).*V_mag(i)));
end
这是我到目前为止所做的。我不确定它是否正确并且代码很慢。