球光照模型

这篇博客探讨了如何在球面上计算光照,并通过将球体划分为多个三角形来实现。它详细介绍了计算环境光、漫反射光和镜面反射光的过程,以及在考虑光源位置和距离衰减的情况下,如何进行三角形的消隐和填充。同时,指出了程序可能存在的问题以及改进方案。
摘要由CSDN通过智能技术生成

先根据经纬度计算出球面上各点,再把球分成很多小三角形,其中两极除外的四边形也分成上下二个三角形,画三角形(设为P0P1P2),每个点计算该面本身(pl),下面(Pdown),右面(Pright),右下面(Pdownright),求光照时,根据每个点到光源位置的经衰减后得到光线颜色,再分别计算环境光,漫反射光,镜面反射光,加点该点的颜色上(点的颜色是该点右下面的颜色,与距离衰减系数(f[i]=1.0/(c0+c1*dist[i]+c2*dist[i]*dist[i]))和面相对光源的正对率(dCosc=Dot(Lv,N1))成正比,计算时也要检测光源是否能够照到该点上,如果光照不到点上则比率为0),然后再将三维点投影到二维平面上,再根据该面是否消隐来填充三角形.

不过该程序中可能存在问题: 程序中的Lv是从原心(0,0,0)到光源lightP的一个向量,光源的点坐标.改进方法是:对四个面,每个面添加一个中心(或其中某个点)M,Lv=lightP-M即可.不过,程序把照到各面上的光当成平行光也未尝不可.

 

 

 

 

 

 

画三角形的源代码如下:

void CTestView::Triangle(CDC *mdc,P3d *p,bool First)//三角形面片

{

    Vector vP10(P1[0]),vP11(P1[1]),vP12(P1[2]);//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值