笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。
CSDN视频网址:http://edu.csdn.net/lecturer/144
今天我们将讨论一种可以检测到3D物体的轮廓方式。 为了使事情变得更清楚,我指的是一个3D对象的轮廓,当光从任意方向落在它上面时。 移动光源可能会相应地改变轮廓。 这完全不同于在图像空间中的轮廓检测,其处理在2D图像中找到对象的边界(其通常不依赖于光源的位置)。 虽然轮廓检测的主题本身可能是有趣的,但对我们来说,其主要目标是实施Stencil Shadow Volume(在上篇博客中介绍)的第一步。 这是一种渲染阴影的技术,在处理点光时尤其有用。 我们将在上一篇博文中研究过此技术。
以下图像演示了我们想要检测的轮廓:
在上面的图像中,轮廓是由光线照射。。。。。。
让我们现在转向更传统的3D语言,模型基本上由三角形组成,因此轮廓必须由三角形边缘创建。我们如何决定边缘是否是剪影的一部分?诀窍是基于漫射光模型,根据该模型,光强度是基于三角形法线和光矢量之间的点积,如果三角形远离光源,该点积运算的结果将小于或等于零。在这种情况下,光线根本不影响三角形。为了确定三角形边缘是否是剪影的一部分,我们需要找到共享相同边缘的相邻三角形,并计算原始三角形及其相邻的光线方向和法线之间的点积,如果一个三角形面向光,但其相邻的边则不