Du bist nicht angemeldet.

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

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

20.04.2012, 20:35

Frage Übungsaufgabe 2.7.6 1 Auflage 3

Bei der Aufgabe 1 soll man ja nur 8 Vertizes und 36 Indizes speichern.
Ich habe eine SCube-Struktur mit einem Positions und Bewegungsvektor. Davon hab ich ein Array mit einer variablen Anzahl von Würfeln (konstantenabhängig) erzeugt.
Die InitScene-Methode habe ich verändert. Hier ein Ausschnitt des veränderten Teils:

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
g_pVertexBuffer->Lock(0,0,(void**)(&pVertices),D3DLOCK_NOSYSLOCK);
    g_pIndexBuffer->Lock(0,0,(void**)(&pwIndices),D3DLOCK_NOSYSLOCK);

    for(int iCube = 0; iCube < g_iNumCubes; iCube++)
    {
        g_aCubes[iCube].vPosition = tbVector3Random() * tbFloatRandom(20.0f,250.0f);
        g_aCubes[iCube].vDirection = tbVector3Random() * tbFloatRandom(1.0f,20.0f);
    }

        pVertices[0].vPosition =  tbVector3(-1.0f,1.0f,-1.0f); //vorne links oben
        pVertices[1].vPosition =   tbVector3(-1.0f,1.0f,1.0f);  //hinten links oben
        pVertices[2].vPosition =  tbVector3(1.0f,1.0f,1.0f);   //hinten rechts oben
        pVertices[3].vPosition = tbVector3(1.0f,1.0f,-1.0f);  //vorne rechts oben
        pVertices[4].vPosition = tbVector3(-1.0f,-1.0f,-1.0f);//vorne links unten
        pVertices[5].vPosition =tbVector3(-1.0f,-1.0f,1.0f);//hinten links unten
        pVertices[6].vPosition = tbVector3(1.0f,-1.0f,1.0f); //hinten rechts unten
        pVertices[7].vPosition =  tbVector3(1.0f,-1.0f,-1.0f);//vorne rechts unten

        for(int iVertex = 0; iVertex < 8; iVertex++)
        {
            pVertices[iVertex].dwColor = tbColorRandom(1.0f) * 2.0f;

            pVertices[iVertex].vTexture = tbVector2Random();
        }

        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

        for(int iIndex = 0; iIndex < 36; iIndex++)
        {
            pwIndices[iIndex] = (WORD)(aiIndex[iIndex]);
        }

    g_pVertexBuffer->Unlock();
    g_pIndexBuffer->Unlock();


In der move-Methode habe ich folgendes hinzugefügt:

C-/C++-Quelltext

1
2
3
4
for(int iCube = 0; iCube < g_iNumCubes; iCube++)
    {
        g_aCubes[iCube].vPosition += g_aCubes[iCube].vDirection *0.01f;
    }


in der Render das hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
for(int i = 0; i < g_iNumCubes; i++)
    {
        tbMatrix mTranslation = tbMatrixTranslation(g_aCubes[i].vPosition);
        g_pD3DDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&mTranslation));
    


    hResult = g_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12);

    if(FAILED(hResult)) TB_ERROR_DIRECTX("g_pD3DDevice->DrawIndexedPrimitive",hResult,TB_STOP);

    }



Meine Frage: Kann man das irgendwie eleganter lösen, so dass ich nicht in allen Methoden eine for-Schleife mit 2048 Iterationen hab?
Und die Farbe und Texturkoordinaten sind auch gleich. Logischerweise, da die Vertices alle gleich sind. Kann man das irgendwie beheben?

Danke im Voraus

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

2

21.04.2012, 09:34

Also ich würde ja mal spontan sagen, dass die Farbe und die Textur Koordinate nicht immer gleich sind, da du sie ja mit derer Random Funktion erstellst.
Und Außerdem musst du sie ja sowieso irgendwo und egal wie definieren von daher brauchst du ja sowieso eine Schleife.
Den auch wenn alle gleich definiert sind, müssen sie ja definiert werden.
Hoffe du hast verstanden, was ich meine.

Und es is ja auch nicht so, dass so eine Schleife solche Performance Einbußen mit sich zieht.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

3

21.04.2012, 09:38

Als Tip noch, im die Move die Position auch noch mit der vergangenen Zeit multiplizieren, dass es überall gleich schnell läuft.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

4

21.04.2012, 11:22

Ok danke. Aber da ich die gleichen 8 Vertizes verwende und Farbe und Texturkoordinaten in der InitScene() initialisiere, bleiben sie beim Zeichnen immer gleich.

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

5

21.04.2012, 11:29

Ja das stimmt, aber da werden die ja auch gar nicht nochmal aufgerufen!
Ja nur ein mal in der initscene Funktion und sonst werden die Kay nur noch gelesen.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

FSA

Community-Fossil

  • Private Nachricht senden

6

21.04.2012, 17:26

Du darfst jetzt natürlich nicht denken, dass jedes Modell so von Hand in den Quelltext geschrieben wird :)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige