Bhe in DirectX non si fa cosi, ma alla fine ci sono riuscito grazie a due funzioni.

codice:
#include <d3dx9.h>
#include <windows.h>
#pragma comment (lib,"d3d9.lib")
#pragma comment (lib,"d3dx9.lib")
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

LPDIRECT3D9				g_pD3D			= NULL;
LPDIRECT3DDEVICE9		g_pd3dDevice	= NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVX			= NULL;
void Render();
void Chiudi();
HRESULT InizializzaScena(HWND hWnd);
HRESULT CostruisciTriangolo();
void ImpostaCamera();

typedef struct _vertex_
{
	float x,y,z;
	DWORD Colore;
} Vertex;
HRESULT InizializzaScena(HWND hWnd)
{
	if ( NULL == (g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
	{
		MessageBox(NULL,"Impossibile creare il device (Sdk_Version)","Errore",MB_OK);
		return E_FAIL;
	}

		D3DPRESENT_PARAMETERS d3dpp;
		ZeroMemory(&d3dpp,sizeof(d3dpp));
	
		d3dpp.BackBufferCount = 1;
		d3dpp.Windowed = TRUE;
		d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
		d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
		d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
		d3dpp.hDeviceWindow = hWnd;
		d3dpp.FullScreen_RefreshRateInHz = 0;


if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                  &d3dpp, &g_pd3dDevice ) ) )

		{
			MessageBox(NULL,"Impossibile inizializzare il device (CreateDevice)","Errore",MB_OK);
			return E_FAIL;
		}
		
		else
		{
			return S_OK;
		}
}

void Chiudi()
{
	if ( g_pVX != NULL )
		g_pVX->Release();
	if ( g_pd3dDevice != NULL )
		g_pd3dDevice->Release();
	if ( g_pD3D != NULL )
		g_pD3D->Release();
}

void Render() 
{
	if (g_pd3dDevice == NULL)
	{
		MessageBox(NULL,"Il device è null!","Adso",MB_OK);
		return;
	}
		
	g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(15,48,170), 1.0f, 0 );

	g_pd3dDevice->BeginScene();
				ImpostaCamera();
		g_pd3dDevice->SetStreamSource(0,g_pVX,0,sizeof(Vertex));	
		g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
		g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,1);
			
	g_pd3dDevice->EndScene();
	g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
}
HRESULT CostruisciTriangolo()
{
	Vertex Vertici[] =
	{
		{ -10.0f, 10.0f, 0.0f, D3DCOLOR_XRGB(88,121,70), },
		{ 10.0f,  10.0f, 0.0f, D3DCOLOR_XRGB(21,121,21), }, 
		{  0.0f, -10.0f, 0.0f, D3DCOLOR_XRGB(53,123,125), },
	};

	if(FAILED(g_pd3dDevice->CreateVertexBuffer(3 * sizeof(Vertex),0,
					D3DFVF_CUSTOMVERTEX,D3DPOOL_MANAGED,&g_pVX,NULL)))
	{
		MessageBox(NULL,"Impossibile creare il VertexBuffer(CreateVertexBuffer)","Mustin",MB_OK);
		return E_FAIL;
	}
		
		void *PVertex;
		if(FAILED(g_pVX->Lock(0,0,&PVertex,0)))
		{
			MessageBox(NULL,"Impossibile effettuare il Lock(Lock)","Mustin",MB_OK);
			return E_FAIL;
		}
		else
		{
			memcpy( PVertex, Vertici, sizeof(Vertici) );
			
			g_pVX->Unlock();
			return S_OK;
		}


}
void ImpostaCamera()
{
	/* Per creare la telecamera devono essere passati 3 vettori
		Il punto da cui guardi
		Il punto in cui guardi
		La rotazione intorno al punto
		A questi si unisce una matrice che conterrà il risultato.
	*/
			D3DXVECTOR3 vEyePt   ( 0.0f, 30.0f,-50.0f );
			D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
			D3DXVECTOR3 vUpVec   ( 0.0f, 1.0f, 0.0f );
			D3DXMATRIX  matView;
			D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
			g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

			D3DXMATRIX matProj;
			D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4,1.0f,1.0f,1000.0f );
			g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj);

}
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam, LPARAM lParam)
{
		switch (Msg)
		{
			case WM_PAINT:
				Render();
				ValidateRect(hWnd,NULL);
			break;

			case WM_CLOSE:
				DestroyWindow(hWnd);
			break;

			case WM_DESTROY:
				Chiudi();
				PostQuitMessage(0);
			break;

			case WM_MBUTTONDOWN:
				MessageBox(NULL,"Bustin","Mustin",MB_OK);
			break;
		}
	return DefWindowProc(hWnd,Msg,wParam,lParam);
}
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLinet,int nCmdShow)
{
	static const char Finestra[] = "Device";
	HWND hWnd;
	MSG Msg;
	WNDCLASSEX wc;

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = Finestra;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

	if(!RegisterClassEx(&wc))
	{
		MessageBox(NULL,"Impossibile registrare la classe (RegisterClassEx)","Bustin",MB_OK);
	}

	if ((hWnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        Finestra,
        "Matrici",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 640,480,
        NULL, NULL, wc.hInstance, NULL)) == NULL)
	{
		MessageBox(NULL,"Impossibile creare la finestra (CreateWindowEx)","Errore",MB_OK);
		return 1;
	}


		if (FAILED(InizializzaScena(hWnd)))
		return 1;

						if(FAILED(CostruisciTriangolo()))
			{
				MessageBox(NULL,"Ci sono stati errori nella costruzione del triangolo","Mustin",MB_OK);
				return 0;
			}


		ShowWindow(hWnd,nCmdShow);
		UpdateWindow(hWnd);

		while (GetMessage(&Msg,hWnd,0,0) > 0)
		{
			TranslateMessage(&Msg);
			DispatchMessage(&Msg);
		}

	return 0;
}
Con questo codice ora il triangolo si vede, ma i colori no...mi sapete dire qalcosa?