首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

D3D中点玲珑做粒子显示不出来。

2013-01-23 
D3D中点精灵做粒子显示不出来。。。有个点精灵的类在工程A里面都能正常工作,可是原版放到工程B中就是显示不出

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中的渲染状态即使我全部注释掉还是渲染不出来,这个到底是怎么回事呢?

有没有哪位朋友遇到过这种问题呢?给点经验建议吧,其实我这个类就是龙书里的那个代码。。。

[解决办法]
龙书里面的点精灵我也试了下,它也没显示出来。应该是观察矩阵没设好。

热点排行