D3DTOP_DOTPRODUCT3的计算公式
?? ?前段時(shí)間在使用DirectX進(jìn)行texture-blending操作時(shí),發(fā)現(xiàn)D3DTOP_DOTPRODUCT3操作描述的比較粗略,在使用的時(shí)候與預(yù)計(jì)的結(jié)果相差十分大。于是把自己試驗(yàn)的結(jié)果記錄一下。
當(dāng)時(shí)在使用D3DTOP_DOTPRODUCT3操作時(shí),在DirectX文檔查詢了它的計(jì)算公式:
SRGBA?=?(Arg1R??×Arg2R?+?Arg1G?×Arg2G?+?Arg1B?×Arg2B?)
但是發(fā)現(xiàn)如果按照公式去計(jì)算,根本達(dá)不到想要的效果。在文檔的第一句說(shuō)明“Modulate?the?components?of?each?argument?as?signed?components”也不知道DX是怎么調(diào)整的。相關(guān)的資料也沒有怎么查詢到。后來(lái)在一個(gè)偶然的機(jī)會(huì)給我看到一段代碼:
| D3DXVECTOR3?vNormal; D3DXVec3Cross(?&vNormal,?&v10,?&v01?); D3DXVec3Normalize(?&vNormal,?&vNormal?); DWORD?rR?=?(DWORD)(127.0f?*?vNormal.x?+?128); DWORD?rG?=?(DWORD)(127.0f?*?vNormal.y?+?128); DWORD?rB?=?(DWORD)(127.0f?*?vNormal.z?+?128); |
于是猜想“Modulate?the?components?of?each?argument?as?signed?components”應(yīng)該是減去128然后再除以127,但是怎樣才能證實(shí)自己的想法呢?其實(shí),在使用D3DTOP_DOTPRODUCT3的COLOROP操作時(shí),我們可以自己把這個(gè)計(jì)算放在一個(gè)紋理里,然后再使用D3DTOP_SELECTARG1,D3DTSS_COLORARG1指向D3DTA_TEXTURE,如果兩次計(jì)算出來(lái)的結(jié)果是一樣的,那么就說(shuō)明了這個(gè)公式基本上是一致的。
最后得出的結(jié)果是:?
SRGBA?=?((Arg1R?-?128)/127.0f?×(Arg2R?-?128)/127.0f?+?
????????(Arg1G?-?128)/127.0f?×(Arg2G?-?128)/127.0f?+
???????(Arg1B?-?128)/127.0f?×(Arg2B?-?128)/127.0f)
總結(jié)
以上是生活随笔為你收集整理的D3DTOP_DOTPRODUCT3的计算公式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝/天猫按图搜索商品API接口,以图搜
- 下一篇: Cartopy 0.20 最新功能 ——