D3DTOP_DOTPRODUCT3的计算公式
来源:互联网 发布:mycat mysql 编辑:程序博客网 时间:2024/06/10 06:20
前段时间在使用DirectX进行texture-blending操作时,发现D3DTOP_DOTPRODUCT3操作描述的比较粗略,在使用的时候与预计的结果相差十分大。于是把自己试验的结果记录一下。
当时在使用D3DTOP_DOTPRODUCT3操作时,在DirectX文档查询了它的计算公式:
SRGBA = (Arg1R ×Arg2R + Arg1G ×Arg2G + Arg1B ×Arg2B )
但是发现如果按照公式去计算,根本达不到想要的效果。在文档的第一句说明“Modulate the components of each argument as signed components”也不知道DX是怎么调整的。相关的资料也没有怎么查询到。后来在一个偶然的机会给我看到一段代码:
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”应该是减去128然后再除以127,但是怎样才能证实自己的想法呢?其实,在使用D3DTOP_DOTPRODUCT3的COLOROP操作时,我们可以自己把这个计算放在一个纹理里,然后再使用D3DTOP_SELECTARG1,D3DTSS_COLORARG1指向D3DTA_TEXTURE,如果两次计算出来的结果是一样的,那么就说明了这个公式基本上是一致的。
最后得出的结果是:
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)
- D3DTOP_DOTPRODUCT3的计算公式
- SQLSERVER的公式计算
- 人月的计算公式
- PI的计算公式
- 计算器的公式计算
- 上证指数的计算公式
- 圆周率的计算公式
- 日期的计算公式
- 四元数的计算公式
- 自定义公式的计算处理
- 计算π的一组公式
- 自定义公式的计算处理
- 自定义公式的计算处理
- 自定义公式的计算处理
- 自定义公式的计算处理
- 自定义公式的计算处理
- 自定义公式的计算处理
- 爱尔兰的基本计算公式
- JVM参数调优
- jquery 拖动图层
- [转]Jollen 的 Android 教學,#16: Event Listener的用法: 以Click Listener為例
- 事由心生
- 传智播客Java web之 HTTP协议详解
- D3DTOP_DOTPRODUCT3的计算公式
- 修改及刷写蓝魔V3 value MP3固件心得
- 传智播客Java web之 Tomcat的启动与批处理分析
- 传智播客Java web之 Tomcat的虚拟目录以及JK插件详解
- CentOS版飞鸽传书
- 传智播客Java web之 Servlet简介以及B/S与C/S的比较
- CentOS 5.3 下源码编译安装Ipmsg 笔记
- 软件行业应聘时面试官在想什么(1)?
- Android中各种JAVA包的功能描述