|
发表于 2011-6-9 16:01:00
|
显示全部楼层
Re:如何渲染灰度图???
不用alpha的图片是为了节省空间,因为加了alpha的话,我所有字体纹理的大小将扩大近一倍,同时也意味着载入到内存时也将扩大一倍的内存。
其实,只需要alpha通道就够了。不过不存在只有alpha通道的格式。
那你可以载入时把灰度值转化成纹理的alpha通道。lock纹理并写入像素即可。
m_pd3dDevice->SetTextureStageState(0,D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState(0,D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
m_pd3dDevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);
m_pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
m_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);
如果不好调整顶点颜色,可否用一张纹理与其作融合处理?
不管是用彩色纹理还是顶点颜色都是差不多的操作,都不好办。
比如说顶点颜色和灰度图混合的方式:
(这里只能采用 src * alpha + dest 这种alpha混合公式)
m_pd3dDevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);
m_pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG2, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
m_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
* 如果要用彩色纹理和灰度图混合就需要2个texture stage,还需要混入D3DTA_DIFFUSE(包括了顶点的光照结果) |
|