找到3D视图矢量和正常背面剔除之间的角度

时间:2016-09-22 08:56:56

标签: matlab

查找视图矢量和曲面法线之间的角度可以有利于获取可见曲面,因为我们使用它来进行背面剔除技术并获得轮廓,折痕对象的边缘。

为了获得可见表面,我使用下面的背面剔除代码:

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

这是我到目前为止所做的。我不确定它是否正确并且代码很慢。

0 个答案:

没有答案