Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
// ------------------------------------------------------------------ // Den Vertex-Buffer erstellen. Jeder Würfel benötigt 8 Vertizes. // Daher ist die Vertex-Buffer-Größe gleich Anzahl der Würfel mal 8 mal Vertexgröße. if(FAILED(hResult = g_pD3DDevice->CreateVertexBuffer(g_iNumCubes * 8 * sizeof(SVertex), 0, SVertex::dwFVF, D3DPOOL_MANAGED, &g_pVertexBuffer, NULL))) { // Fehler beim Erstellen des Vertex-Buffers! TB_ERROR_DIRECTX("g_pD3DDevice->CreateVertexBuffer", hResult, TB_ERROR); } // Nun generieren wir den Index-Buffer. Jeder Würfel braucht 36 Indizes. // Es wird ein 16-Bit-Index-Buffer verwendet. if(FAILED(hResult = g_pD3DDevice->CreateIndexBuffer(g_iNumCubes * 36 * 2, 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, &g_pIndexBuffer, NULL))) { // Fehler beim Erstellen des Index-Buffers! TB_ERROR_DIRECTX("g_pD3DDevice->CreateIndexBuffer", hResult, TB_ERROR); } // Vertex- und Index-Buffer komplett sperren g_pVertexBuffer->Lock(0, 0, (void**)(&pVertices), D3DLOCK_NOSYSLOCK); g_pIndexBuffer->Lock(0, 0, (void**)(&pusIndices), D3DLOCK_NOSYSLOCK); // Nun gehen wir jeden einzelnen Würfel durch. for(int iCube = 0; iCube < g_iNumCubes; iCube++) { // Zufällige Position für diesen Würfel erzeugen vCubePosition = tbVector3Random() * tbFloatRandom(20.0f, 250.0f); // Startvertex und Startindex für diesen Würfel berechnen. // Diese Werte beschreiben, an welcher Stelle im Vertex- und Index-Buffer // die Daten des aktuellen Würfels beginnen. iStartVertex = iCube * 8; iStartIndex = iCube * 36; // Vertizes für diesen Würfel generieren. Erst die Positionsangaben. pVertices[iStartVertex + 0].vPosition = vCubePosition + tbVector3(-1.0f, 1.0f, -1.0f); pVertices[iStartVertex + 1].vPosition = vCubePosition + tbVector3(-1.0f, 1.0f, 1.0f); pVertices[iStartVertex + 2].vPosition = vCubePosition + tbVector3( 1.0f, 1.0f, 1.0f); pVertices[iStartVertex + 3].vPosition = vCubePosition + tbVector3( 1.0f, 1.0f, -1.0f); pVertices[iStartVertex + 4].vPosition = vCubePosition + tbVector3(-1.0f, -1.0f, -1.0f); pVertices[iStartVertex + 5].vPosition = vCubePosition + tbVector3(-1.0f, -1.0f, 1.0f); pVertices[iStartVertex + 6].vPosition = vCubePosition + tbVector3( 1.0f, -1.0f, 1.0f); pVertices[iStartVertex + 7].vPosition = vCubePosition + tbVector3( 1.0f, -1.0f, -1.0f); for(int iVertex = iStartVertex; iVertex < iStartVertex + 8; iVertex++) { // Zufallsfarbe erzeugen (Alpha = 1) pVertices[iVertex].dwColor = tbColorRandom(1.0f) * 2.0f; // Texturkoordinaten generieren pVertices[iVertex].vTexture = tbVector2Random(); } // Nun die Indizes eintragen. Jeweils drei von ihnen ergeben ein Dreieck. int aiIndex[36] = {0, 3, 7, 0, 7, 4, // Vorderseite 2, 1, 5, 2, 5, 6, // Hinterseite 1, 0, 4, 1, 4, 5, // Linke Seite 3, 2, 6, 3, 6, 7, // Rechte Seite 0, 1, 2, 0, 2, 3, // Oberseite 6, 5, 4, 6, 4, 7}; // Unterseite // Die 36 Indizes in den Index-Buffer übertragen. // Zu jedem Indexwert muss noch der Startvertexwert addiert werden. for(int iIndex = 0; iIndex < 36; iIndex++) { // Index eintragen pusIndices[iStartIndex + iIndex] = aiIndex[iIndex] + iStartVertex; } } // Vertex- und Index-Buffer wieder entsperren g_pVertexBuffer->Unlock(); g_pIndexBuffer->Unlock(); return TB_OK; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
// ------------------------------------------------------------------ // Den Vertex-Buffer erstellen. Jeder Würfel benötigt 8 Vertizes. // Daher ist die Vertex-Buffer-Größe gleich Anzahl der Würfel mal 8 mal Vertexgröße. if(FAILED(hResult = g_pD3DDevice->CreateVertexBuffer(g_iNumCubes * 8 * sizeof(SVertex), 0, SVertex::dwFVF, D3DPOOL_MANAGED, &g_pVertexBuffer, NULL))) { // Fehler beim Erstellen des Vertex-Buffers! TB_ERROR_DIRECTX("g_pD3DDevice->CreateVertexBuffer", hResult, TB_ERROR); } // Nun generieren wir den Index-Buffer. Jeder Würfel braucht 36 Indizes. // Es wird ein 16-Bit-Index-Buffer verwendet. if(FAILED(hResult = g_pD3DDevice->CreateIndexBuffer(g_iNumCubes * 36 * sizeof(int), 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, &g_pIndexBuffer, NULL))) { // Fehler beim Erstellen des Index-Buffers! TB_ERROR_DIRECTX("g_pD3DDevice->CreateIndexBuffer", hResult, TB_ERROR); } // Nun gehen wir jeden einzelnen Würfel durch. for(int iCube = 0; iCube < g_iNumCubes; iCube++) { // Vertex- und Index-Buffer sperren g_pVertexBuffer->Lock(iCube *8 * sizeof(SVertex), 8 * sizeof(SVertex), (void**)(&pVertices), D3DLOCK_NOSYSLOCK); g_pIndexBuffer->Lock(iCube * 36 * sizeof(int), 36 * sizeof(int), (void**)(&pusIndices), D3DLOCK_NOSYSLOCK); // Zufällige Position für diesen Würfel erzeugen vCubePosition = tbVector3Random() * tbFloatRandom(20.0f, 250.0f); // Vertizes für diesen Würfel generieren. Erst die Positionsangaben. pVertices[0].vPosition = vCubePosition + tbVector3(-1.0f, 1.0f, -1.0f); pVertices[1].vPosition = vCubePosition + tbVector3(-1.0f, 1.0f, 1.0f); pVertices[2].vPosition = vCubePosition + tbVector3( 1.0f, 1.0f, 1.0f); pVertices[3].vPosition = vCubePosition + tbVector3( 1.0f, 1.0f, -1.0f); pVertices[4].vPosition = vCubePosition + tbVector3(-1.0f, -1.0f, -1.0f); pVertices[5].vPosition = vCubePosition + tbVector3(-1.0f, -1.0f, 1.0f); pVertices[6].vPosition = vCubePosition + tbVector3( 1.0f, -1.0f, 1.0f); pVertices[7].vPosition = vCubePosition + tbVector3( 1.0f, -1.0f, -1.0f); for(int iVertex = 0; iVertex < 8; iVertex++) { // Zufallsfarbe erzeugen (Alpha = 1) pVertices[iVertex].dwColor = tbColorRandom(1.0f) * 2.0f; // Texturkoordinaten generieren pVertices[iVertex].vTexture = tbVector2Random(); } // Nun die Indizes eintragen. Jeweils drei von ihnen ergeben ein Dreieck. int aiIndex[36] = {0, 3, 7, 0, 7, 4, // Vorderseite 2, 1, 5, 2, 5, 6, // Hinterseite 1, 0, 4, 1, 4, 5, // Linke Seite 3, 2, 6, 3, 6, 7, // Rechte Seite 0, 1, 2, 0, 2, 3, // Oberseite 6, 5, 4, 6, 4, 7}; // Unterseite // Die 36 Indizes in den Index-Buffer übertragen. // Zu jedem Indexwert muss noch der Startvertexwert addiert werden. for(int iIndex = 0; iIndex < 36; iIndex++) { // Index eintragen pusIndices[iIndex] = aiIndex[iIndex]; } // Vertex- und Index-Buffer wieder entsperren g_pVertexBuffer->Unlock(); g_pIndexBuffer->Unlock(); } return TB_OK; } |
Zitat von »"butane"«
aber "sizeof(int) = 2"
C-/C++-Quelltext |
|
1 |
g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(SVertex)); |
Werbeanzeige