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 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(); }
Mais le seul effet que ça à, c'est d'allonger ma sphère, elle est toute déformée ...
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(); }
Comment pourrais je faire pour afficher une sphère en bleue ?
Merci d'avance
Seb
Partager