奇怪的问题—3D的颜色设置)
我想在程序中绘制一个三角形,以下是大概的步骤:
1 定义顶点结构和格式struct CUSTOMVERTEX
{
FLOAT x, y, z;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
2 设置顶点数据CUSTOMVERTEX Vertices[] =
{
{ 150.0f, 50.0f, 0.5f, D3DCOLOR_ARGB(255, 50, 50, 50)},
{ 250.0f, 250.0f, 0.5f, D3DCOLOR_ARGB(255, 50, 50, 150)},
{ 50.0f, 250.0f, 0.5f, D3DCOLOR_ARGB(255, 50, 50, 250)},
};
3 创建顶点缓冲区g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL );
4 绘制图形(已关闭光照处理)g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1);
问题是:
程序显示出来的三角形的颜色与我设置的不一样。经过一翻分析后发现,在设置顶点数据的颜色时,R G B三个分量中只有B分量有效。上面第2步“设置顶点数据”的数组定义与下述代码效果是一样的:
CUSTOMVERTEX Vertices[] =
{
{ 150.0f, 50.0f, 0.5f, D3DCOLOR_ARGB(255, 0, 0, 50)},
{ 250.0f, 250.0f, 0.5f, D3DCOLOR_ARGB(255, 0, 0, 150)},
{ 50.0f, 250.0f, 0.5f, D3DCOLOR_ARGB(255, 0, 0, 250)},
};
这是为什么,如何改正?
[解决办法]
你是否enable了alpha blend/texture blend?
可能是你开始画纹理的时候设置了纹理混合和alpha混合。
绘制三角形的时候没有关掉混合,所以出现了奇怪的效果。
画三角形前把stage0的texture 设置成null,然后关掉alpha blend看看