Bonjour à tous,

je débute en DirectX, et en C# par la même occasion.
J'essaye de transposer un code en C++ en C#, qui doit colorer une sphère en bleue, mais ça ne marche pas :

Code C++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
 
LPD3DXMESH pTempEarthMesh = NULL;
 
    D3DXCreateSphere(g_pd3dDevice, 1.0f, 10, 10, &pTempEarthMesh, NULL);
 
LPDIRECT3DVERTEXBUFFER9 pTempVertexBuffer;
 
    pTempEarthMesh->CloneMeshFVF( 0, D3DFVF_MY_VERTEX, g_pd3dDevice, &g_pEarthMesh );
 
    if( SUCCEEDED( g_pEarthMesh->GetVertexBuffer( &pTempVertexBuffer ) ) )
    {
        int nNumVerts = g_pEarthMesh->GetNumVertices();
        Vertex *pVertices = NULL;
 
        pTempVertexBuffer->Lock( 0, 0, (void**)&pVertices, 0 );
        {
            for( int i = 0; i < nNumVerts; ++i )
                pVertices[i].diffuse = D3DCOLOR_COLORVALUE( 0.0, 0.0, 1.0, 1.0 );
        }
        pTempVertexBuffer->Unlock();
 
        pTempVertexBuffer->Release();
    }
Code C#
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
Mesh pTempEarthMesh = null;
pTempEarthMesh = Mesh.Sphere(device, 1.0f, 20, 20);
 
g_pEarthMesh =  pTempEarthMesh.Clone(pTempEarthMesh.Options.Value, pTempEarthMesh.VertexFormat |
					VertexFormats.Normal, device);
				if ((pTempVertexBuffer = g_pEarthMesh.VertexBuffer) != null)
				{
 
					int nNumVerts = g_pEarthMesh.NumberVertices;
					CustomVertex.PositionColored[] Vertex;
 
					Vertex = (CustomVertex.PositionColored[]) pTempVertexBuffer.Lock(0, typeof(CustomVertex.PositionColored), LockFlags.None, nNumVerts);
 
					for (int i = 0; i < nNumVerts; i++)
						Vertex[i].Color = new ColorValue(0, 0, 255, 255).ToArgb();
 
					pTempVertexBuffer.Unlock();
				}
Mais le seul effet que ça à, c'est d'allonger ma sphère, elle est toute déformée ...

Comment pourrais je faire pour afficher une sphère en bleue ?

Merci d'avance

Seb