D3D中点精灵做粒子显示不出来。。。
有个点精灵的类在工程A里面都能正常工作,可是原版放到工程B中就是显示不出来了,B工程比测试用例A复杂一些,
但里面的所有都能正常运行,包括灯光,alpha测试与混合,可编程渲染管线中内容,可就是关于点精灵处显示不出来,
我想或许是渲染状态不对吧,可是找不出哪里的问题,
在测试用例A中的点精灵渲染状态时这样的:
void PSystem::preRender()
{
_device->SetRenderState(D3DRS_LIGHTING, false);
_device->SetRenderState(D3DRS_POINTSPRITEENABLE, true);
_device->SetRenderState(D3DRS_POINTSCALEENABLE, true);
_device->SetRenderState(D3DRS_POINTSIZE, FtoDw(_size));
_device->SetRenderState(D3DRS_POINTSIZE_MIN, FtoDw(0.0f));
//控制与距离相关的粒子大小
_device->SetRenderState(D3DRS_POINTSCALE_A, FtoDw(0.0f));
_device->SetRenderState(D3DRS_POINTSCALE_B, FtoDw(0.0f));
_device->SetRenderState(D3DRS_POINTSCALE_C, FtoDw(1.0f));
//纹理使用alpha通道
_device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
_device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
_device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
_device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
}
void PSystem::postRender()
{
_device->SetRenderState(D3DRS_LIGHTING, true);
_device->SetRenderState(D3DRS_POINTSPRITEENABLE, false);
_device->SetRenderState(D3DRS_POINTSCALEENABLE, false);
_device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
}
对于B中的渲染状态即使我全部注释掉还是渲染不出来,这个到底是怎么回事呢?
有没有哪位朋友遇到过这种问题呢?给点经验建议吧,其实我这个类就是龙书里的那个代码。。。
[解决办法]
龙书里面的点精灵我也试了下,它也没显示出来。应该是观察矩阵没设好。