背面剔除算法的原理与应用(VS2010 MFC)

先来看案例运行效果:在这里插入图片描述

在这里插入图片描述

背景:

投影变换可以使三维物体在二维平面显示器上表达。但经过投影变换后,三维物体失去了深度坐标,使我们对图形的理解存在二义性。

定义:

背面剔除是指消除视点不可见的多边形,正面面向视点,背面背向视点。其实就是在三维物体运动过程中,不断剔除背面。背面剔除算法最关键的就是判断面是否可见。

算法原理:

由于凸多面体的特殊性,当背面剔除算法应用于凸多面体时效果最好。对于其任一个表面,根据外法向量与视向量的点积进行可见性检测。在这里插入图片描述

代码解析(孔令德老师原创):

//计算向量的点积函数
friend double DotProduct(const CVector3 &v0, const CVector3 &v1);
double DotProduct(const CVector3 &v0, const CVector3 &v1)
{
return(v0.x * v1.x + v0.y * v1.y + v0.z * v1.z);
}

//计算向量的叉积函数
friend CVector3 CrossProduct(const CVector3 &v0, const CVector3 &v1);
CrossProduct(const CVector3 &v0, const CVector3 &v1)
{
CVector3 vector;
vector.x = v0.y * v1.z - v0.z * v1.y;
vector.y = v0.z * v1.x - v0.x * v1.z;
vector.z = v0.x * v1.y - v0.y * v1.x;
return vector;
}
//背面剔除算法:
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页