|
|
环境:WinXP DXSDK8.1 BCB6.0 镭7500 SERIES
我在练习时发现,如果我的程序使用 HARDWARE_VERTEXPROCESSING, FVF Format中一旦包含PSIZE,基于法线的光源计算就完全乱了。
SOFTWARE下一切正常。
如果删除PSIZE这项同样一切正常。
而没有normal和光源的时候,PSIZE本身也正确工作。
检查DeviceCaps的 FVFCaps , d3d 在DEFALT, HAL情况下 D3DFVFCAPS_PSIZE 位为 1
而无论创建的是SOFTWARE_VERTEXPROCESSING还是 HARDWARE的 d3dDevice, FVFCaps 的D3DFVFCAPS_PSIZE 位都为 1
这证明我的系统能够使用 pSize项。
在我机器上重现这一幕非常简单。打开SDK自带的D3D的Tutorial,修改第四课Light。
FVF定义改为:
struct CUSTOMVERTEX
{
D3DXVECTOR3 position; // The 3D position for the vertex
D3DXVECTOR3 normal; // The surface normal for the vertex
FLOAT pointSize;// The point size
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_PSIZE)
此时运行正常。然后修改 g_pD3D->CreateDevice 中 SOFTWARE_VERTEXPROCESSING 为
HARDWARE_VERTEXPROCESSING 再运行,就会发现光照计算乱七八糟了。
望解惑,希望知道这是为什么,以及到底哪个Caps描述系统的这一能力。 |
|