//Первая фигура
#define D3DFVF_VERTEX (D3DFVF_XYZ | D3DFVF_TEX1)
struct Vertex
{
float x, y, z;
float tu, tv;
};
class f1
{
const static Vertex verts[] =
{
-1.0f, -0.6f, 1.0f, 0, 1,
-1.0f, 1.0f, 1.0f, 0, 0,
1.0f, 1.0f, 1.0f, 1, 0,
1.0f, -0.6f, 1.0f, 1, 1,
};
const unsigned short inds[] =
{
0,1,3,3,1,2,
};
bool init()
{
HRESULT hr;
void * pBuf;
D3DXCreateTextureFromResource(pDevice, NULL, (LPCSTR)BITMAP1, &pTexture);
hr = pDevice->CreateVertexBuffer(sizeof(Vertex)*4, 0, D3DFVF_VERTEX, D3DPOOL_DEFAULT, &pVB, 0);
if(FAILED(hr))
return false;
hr = pVB->Lock(0, sizeof(Vertex)*4, &pBuf, 0);
if(FAILED(hr))
return false;
memcpy(pBuf, verts, sizeof(Vertex)*4);
pVB->Unlock();
hr = pDevice->CreateIndexBuffer(sizeof(short)*6, 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &pIB, 0);
if(FAILED(hr))
return false;
hr = pIB->Lock(0, sizeof(short)*6, &pBuf, 0);
if(FAILED(hr))
return false;
memcpy(pBuf, inds, sizeof(short)*6);
pIB->Unlock();
return true;
}
f1()
{
init();
}
void Draw()
{
pDevice->SetFVF(D3DFVF_VERTEX);
pDevice->SetTexture(0, pTexture);
pDevice->SetStreamSource(0, pVB, 0, sizeof(Vertex));
pDevice->SetIndices(pIB);
pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);
}
};
//Вторая фигура
#define D3DFVF_VERTEX1 (D3DFVF_XYZ | D3DFVF_DIFFUSE)
struct Vertex1
{
float x, y, z;
DWORD color;
};
class f2
{
const static Vertex1 verts[] =
{
-0.7f, -0.7f, 0.0f, 0xffff0000,
-0.7f, 0.7f, 0.0f, 0xffff0000,
0.7f, 0.7f, 0.0f, 0xffff0000,
0.7f, -0.7f, 0.0f, 0xffff0000,
};
const unsigned short inds[] =
{
0,1,3,3,1,2,
};
bool init()
{
HRESULT hr;
void * pBuf;
hr = pDevice->CreateVertexBuffer( sizeof(Vertex1) * 4,
0 , D3DFVF_VERTEX1, D3DPOOL_DEFAULT, &pVB, 0 );
if( FAILED(hr) )
return false;
hr = pVB->Lock( 0, sizeof(Vertex1) * 4, &pBuf, 0 );
if( FAILED(hr) )
return false;
memcpy( pBuf, verts, sizeof(Vertex1) * 4);
pVB->Unlock();
hr = pDevice->CreateIndexBuffer( sizeof(short) * 6,
0, D3DFMT_INDEX16, D3DPOOL_DEFAULT,&pIB, 0);
if( FAILED(hr) )
return false;
hr = pIB->Lock( 0, sizeof(short) * 6, &pBuf, 0 );
if( FAILED(hr) )
return false;
memcpy( pBuf, inds, sizeof(short) * 6);
pIB->Unlock();
return true;
}
f2()
{
init();
}
void Draw()
{
pDevice->SetFVF( D3DFVF_VERTEX1 );
pDevice->SetStreamSource( 0, pVB, 0, sizeof(Vertex1) );
pDevice->SetIndices(pIB);
pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);
}
};
//Вывод фигур
f1 * k1 = new f1();
f2 * k2 = new f2();
pDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,155), 1.0f, 0 );
pDevice->BeginScene();
k1->Draw();
k2->Draw();
pDevice->EndScene();
pDevice->Present( NULL, NULL, NULL, NULL );
Цвет фигуры меняется в DirectX
Сейчас код оформить некогда, но вдруг без кода кто-нибудь знает почему так.
В общем, показывай свой код.
P.S. DirectX цвета сам не меняет.
2. Проблема может быть в освещении.
3. Код не отформатирован, лениво разбираться подробнее. Заключи его в тег [ code ] [ / code ].
2. Я источники света не добавлял.
3. Изменил.
Источник света не добавлял, но само освещение мог включить.
Приведи пример кода инициализации DirectX.
Код:
pD3D = Direct3DCreate9( D3D_SDK_VERSION);
if( !pD3D)
return false;
D3DPRESENT_PARAMETERS d3dpp = {0};
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
HRESULT hr;
hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &pDevice );
if( FAILED(hr) || !pDevice)
return false;
pDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
if( !pD3D)
return false;
D3DPRESENT_PARAMETERS d3dpp = {0};
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
HRESULT hr;
hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &pDevice );
if( FAILED(hr) || !pDevice)
return false;
pDevice->SetRenderState(D3DRS_LIGHTING, FALSE);