d3d9 固定管线,打开光照的情况下还保留有自己定义的顶点颜色

由于D3D和OGL的固定管线在使用了灯光之后,其计算出来的最终的灯光数据是以逐顶点的颜色,即DIFFUSE数据流输出的。但是如果物体原本就已经包含了逐顶点的颜色的话,就会和灯光计算出来的结果产生冲突,会把灯光的数据洗掉,这就是两者不能同时开的原因了。
    解决的方法只有一种,那就是两个Pass才能完成这种情况的渲染。
    第一次渲染时,将D3DRS_COLORVERTEX状态设置为FALSE,即关闭掉顶点颜色,然后将D3DRS_LIGHTING设置为TRUE,即打开灯光,同时设置D3DRS_DIFFUSEMATERIALSOURCE为D3DMCS_MATERIAL,即材质的Diffuse颜色从材质的定义数据中来,然后DrawPrimitive完成第一次渲染。
    第二次渲染时,将D3DRS_SRCBLEND设置为D3DBLEND_SRCCOLOR,将D3DRS_DESTBLEND设置为D3DBLEND_DESTCOLOR,还有D3DRS_BLENDOP设置为D3DBLENDOP_ADD,这个意思是开启颜色Blend算法,即马上就要画的物体的颜色与屏幕上已经有的颜色做混合,且混合的方式是“源颜色 加上 目标颜色”。接着,将D3DRS_COLORVERTEX打开,D3DRS_DIFFUSEMATERIALSOURCE设置为D3DMCS_COLOR1,灯光仍然保持打开,这样就等于启用了顶点颜色中所定义的Diffuse数据。OK了,现在再打开D3DRS_ALPHABLENDENABLE,再DrawPrimitive,就可以将物体的第二个Pass画到屏幕上去了。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值