欢迎来到天天文库
浏览记录
ID:55417953
大小:104.50 KB
页数:2页
时间:2020-05-12
《渲染物体影的步骤.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.渲染物体影子的步骤:1.绘制场景(下面渲染的影子就出现在这个场景中);2.渲染物体(这个物体在灯光的作用下将出现影子);3.求出灯源相对于物体的位置,这需要把作用于物体的模型视图矩阵的逆乘以灯光在眼坐标中的位置;4.求出物体相对于灯光的边界线,对于简单的绘制可以自己找出物体的边界线,对于复杂的物体可以使用算法来找出物体的边界线;5.在模板中绘制影子:初始化模板缓存为0;开启模板,总是通过模板测试,通过模板测试和深度测试后模板缓存递增;以GL_CCW来绘制“影子体”的外表面;改变模板缓存选项,通过模板测
2、试和深度测试后模板缓存递减;以GL_CW来绘制“影子体”的内表面。这样在模板缓存中就存在了影子。以上操作开启深度测试,但禁止写深度缓存,禁止写颜色缓存。6.开启颜色缓存写功能,设置模板测试为不为0通过,绘制一个足够覆盖整个程序绘图区域的矩形。这样,在屏幕中就绘制了物体的影子。2.根据面的三个定点求解平面方程的程序:inlinevoidCalcPlane(glObjecto,sPlane*plane){sPointv[4];inti;for(i=0;i<3;i++){v[i+1].x=o.points[pl
3、ane->p[i]].x;v[i+1].y=o.points[plane->p[i]].y;v[i+1].z=o.points[plane->p[i]].z;}plane->PlaneEq.a=v[1].y*(v[2].z-v[3].z)+v[2].y*(v[3].z-v[1].z)+v[3].y*(v[1].z-v[2].z);plane->PlaneEq.b=v[1].z*(v[2].x-v[3].x)+v[2].z*(v[3].x-v[1].x)+v[3].z*(v[1].x-v[2].x);pla
4、ne->PlaneEq.c=v[1].x*(v[2].y-v[3].y)+v[2].x*(v[3].y-v[1].y)+v[3].x*(v[1].y-v[2].y);plane->PlaneEq.d=-(v[1].x*(v[2].y*v[3].z-v[3].y*v[2].z)+v[2].x*(v[3].y*v[1].z-v[1].y*v[3].z)+v[3].x*(v[1].y*v[2].z-v[2].y*v[1].z));}1.比较两个数(pli,p2i)和另外两个数(p1j,p2j)是否相同的算法:P
5、1i=((p1i+p2i)-abs(p1i-p2i))/2;P2i=((p1i+p2i)+abs(p1i-p2i))/2;P1j=((p1j+p2j)-abs(p1j-p2j))/2;P2j=((p1j+p2j)+abs(p1j-p2j))/2;if((P1i==P1j)&&(P2i==P2j))…2.ASDW控制灯源的移动。
此文档下载收益归作者所有