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

奇怪的有关问题(D3D的颜色设置)

2012-03-24 
奇怪的问题(D3D的颜色设置)我想在程序中绘制一个三角形,以下是大概的步骤:1 定义顶点结构和格式struct CUS

奇怪的问题(D3D的颜色设置)
我想在程序中绘制一个三角形,以下是大概的步骤:

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看看

热点排行