[发明专利]一种产生体积阴影的方法及系统有效
| 申请号: | 200610127574.0 | 申请日: | 2006-09-14 |
| 公开(公告)号: | CN101145246A | 公开(公告)日: | 2008-03-19 |
| 发明(设计)人: | 刘皓 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
| 主分类号: | G06T15/60 | 分类号: | G06T15/60 |
| 代理公司: | 北京同达信恒知识产权代理有限公司 | 代理人: | 黄志华 |
| 地址: | 518044广东省深圳市*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 产生 体积 阴影 方法 系统 | ||
技术领域
本发明涉及计算机技术领域,尤其涉及一种产生体积阴影的方法及其系统。
背景技术
当在一个物体和光源之间存在障碍物时,该物体将会处在阴影中。障碍物产生的阴影区域称为体积阴影。体积阴影可以由轮廓边扩展到一定距离以外或者无穷远处得到。轮廓边的确定方法有很多种,基本方法为确定出被朝向相反(一个面向光源,另一个背向光源)的两个三角形所共享的边,因为只有这样的边会最终成为轮廓边,其他的边在光源看来都在物体投影的内部而不是边缘。图1A所示为轮廓边示意图,该图中ab边为面V0和面V1的公共边,n0和n1分别为V0和V1的法线,V0面向光源,而V1背向光源,则ab边为轮廓边。图1B所示为非轮廓边示意图,该图中的ab边为面V0和面V1的公共边,n0和n1分别为V0和V1的法线,V0和V1都面向光源,则ab边为非轮廓边。图2所示为体积阴影的示意图,点L为光源,ABCD为产生阴影的物体,在底板上形成的阴影为EFGH,体积阴影指AEFB,BFGC,CGHD,DHEA所组成的一个区域。只要获得AEFB,BFGC,CGHD,DHEA,并将它们绘制出来,即可绘制出阴影EFGH。
现有技术中,产生体积阴影时需要在中央处理器CPU中对物体三维模型的各顶点添加辅助的顶点,判断出该物体三维模型的轮廓边顶点,根据光源的方向,将轮廓边顶点对应的辅助顶点在反向光源的方向进行偏移,产生体积阴影,然后CPU将该体积阴影的数据传送给图像处理器(GPU,Graph ProcessingUnit),由GPU对体积阴影进行渲染,绘制出体积阴影。参阅图3所示,CPU中的预处理过程如下:
步骤301、用三角形网格建立物体的三维模型,对该模型中的每个面的每个边的两个顶点A和B添加上共用该边的两个面的法线,添加两个辅助顶点A1和B1分别与原本两个顶点数据A和B相同(顶点位置,两个法线均相同),并在A和B添加上一项为1的数据,在A1和B1添加上一项为0的数据以示区别。
步骤302、遍历三维模型的所有三角形,根据各三角形的法线方向和光源的方向计算函数dot3(light_direction,triangle_normal)的取值,用该函数值判断各三角形是面向光源还是背向光源,当函数dot3(light_direction,triangle_normal)的取值大于零时,三角形为面向光源;当函数dot3<0(light_direction,triangle_normal)的取值小于零时,三角形为背向光源。对于面向光源的三角形,将该三角形的三条边压入栈内并与该栈中的其他边进行比较,如果存在重复的边,则将该边删除;对三维模型的所有三角形的所有边进行处理后,栈中的边则为轮廓边。
步骤303、根据光源的方向,将轮廓边上的各顶点对应的辅助顶点分别在反向光源的方向进行偏移,获得体积阴影。
进行完上述预处理,CPU将处理得到的体积阴影数据传送给GPU,GPU对体积阴影进行渲染,绘制出体积阴影。
采用上述方法,若轮廓边数目为n,在CPU中获得体积阴影时,需要动态生产2n个三角形,当光源产生运动时,轮廓边需要动态重新生成,而这些都需要由CPU进行预处理后获得体积阴影的数据,然后将体积阴影的数据传送给GPU,不仅耗时,同时增大了系统的开销。并且,采用该方法,当三维模型有n个顶点,平均每个顶点有m个面共有时,则该三维模型一共有mn/3个面需要进行处理,在预处理时会产生4mn个顶点,渲染体积阴影时需要处理4mn个顶点,通常m大于等于3,使得渲染时GPU资源开销进一步增大。
发明内容
本发明提供一种体积阴影的实现方法及系统,用以解决现有技术中存在的产生体积阴影时CPU进行预处理后获得的顶点数量较大,CPU和GPU间传输体积阴影数据时存在大量的数据交互,不仅耗时,也增大了系统开销的问题。
本发明提供以下技术方案:
一种产生体积阴影的方法,包括如下步骤:
为物体的三维模型的每个顶点添加一个辅助顶点;
利用与背景颜色不同的颜色渲染所述物体的三维模型,并将渲染后的物体的三维模型的顶点转换到屏幕空间得到各顶点的屏幕位置;
分别在各顶点的屏幕位置所对应的像素点周围的多个像素位置对渲染后得到的纹理进行采样,并依据采样的纹理的颜色值确定属于物体轮廓边的顶点;
将属于物体轮廓边的顶点的辅助顶点进行偏移产生体积阴影。
其中,在中央处理器中为顶点的数据项中添加标识区分辅助顶点,并将添加了辅助顶点的物体的三维模型数据传送给图形处理器GPU,由GPU完成后续的步骤。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200610127574.0/2.html,转载请声明来源钻瓜专利网。





