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

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

1

14.05.2006, 11:37

Setzen von Kugeln

Also ich möchte eine Kugel an einen zufälligen Ort setzen. Ich habe also die Modeldatei sphere.x geladen. nun möchte ich mittels einer Translationmatrix eine zufällige Position auswählen

C-/C++-Quelltext

1
mWorld = tbMatrixTranslation(tbVector3Random() * tbFloatRandom(20.0,250.0));

Und nun muss ich doch den D3DTS_... Befehl eingeben. Doch wie heißt dieser befehl für die Kugel
Das Programm funktioniert in etwa so wie das Vertex und Index Buffer Programm aus Davids Buch. (Kamerabewegung mit den Pfeiltasten und so)
Ich hab mal eingetippt

C-/C++-Quelltext

1
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));

Doch dann bewegt sich meine Kamera zufällig durch den Raum
danach sieht der Code zum zeichnen der Kugel so aus

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
D3DMATERIAL9 Material2;
    Material.Diffuse    = tbColor(0.0f, 0.75f, 0.0f);   // Hellgraue Streufarbe

    Material.Ambient    = tbColor(0.25f, 0.25f, 0.25f); // Dunkelgraue Hintergrundfarbe

    Material.Emissive   = tbColor(0.25f, 0.0f, 0.0f);   // Keine Eigenfarbe

    Material.Specular   = tbColor(0.25f, 0.25f, 0.25f); // 25% hellere Glanzfarbe als Streufarbe

    Material.Power      = 100;  //Glanzfaktor variiert

        
    // Das Material einsetzen

    g_pD3DDevice->SetMaterial(&Material2);
    // Die Kugel zeichnen

    g_pSphereModel->DrawSubset(0);

Ich hoffe das mir jemand helfen kann

ext

Treue Seele

  • Private Nachricht senden

2

14.05.2006, 11:55

D3DTS_WORLD ist die Transformationsmatrix mit der deine Kugel aus dem Objekt-Koordinatenraum in den Weltkoordinatenraum transformiert wird.

Da du die Verschiebung zufällig bestimmst kannst du erstmal nen Weilchen suchen bis du die findest, aber du kannst ein wenig schummeln ;)

Du hast in der Matrix mWorld die Translation gespeichert und kannst damit die Kamera auf das Objekt schauen lassen. Deine Kamera besteht ja aus folgenden Angaben: Position, Blickpunkt, Oben (die Angabe wo "Oben" ist)
Oben ist normal immer die Y-Achse, also bleibt das bei [0,1,0]
Blickpunkt wäre jetzt der Punkt an dem die Kugel sitzt. Wenn der Mittelpunkt der Kugel im Objektkoordinatenraum [0,0,0] ist, dann ist der Blickpunkt einfach die Translation, d.h. Blickpunkt ist [Translation.x,Translation.y,Translation.z]
und die Position wählst du relativ zum Blickpunkt, z.B. immer 20Einheiten auf der Z-Achse (in negative Richtung) entfernt, das sähe dann so aus: [Translation.x,Translation.y,Translation.z-20]

Die x,y,z-Werte der Translation stehen in der Matrix an der Stelle 41,42 und 43

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

3

14.05.2006, 12:11

Ach so. Jetzt hab ichs kapiert. das mit D3DTS_WORLD war mir bisher unklar.
Danke

ext

Treue Seele

  • Private Nachricht senden

4

14.05.2006, 13:03

Was ich vergessen habe: die relative Position muss natürlich eine größere Entfernung zum Mittelpunkt der Kugel haben wie der Radius groß ist.

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

5

14.05.2006, 13:09

Wieso rotiert bei folgender Zeile meine Kamera?

C-/C++-Quelltext

1
tbMatrixRotationY(TB_DEG_TO_RAD((float)(iSphere) * 36.0f + g_fTime * 10.0f)) *

ext

Treue Seele

  • Private Nachricht senden

6

14.05.2006, 13:22

Da steht am Ende noch nen * was steht dahinter? Mit der Zeile erzeugst bloß ne Y-Rotations-Matrix die alleine macht noch nichts.

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

7

14.05.2006, 16:34

So ich hab jetzt ein Problem, dass das mit dem Zufallsgenerator nicht klappt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vSpherePosition= tbVector3Random()* tbFloatRandom(20.0,250.0);
//Die kugeln haben eine zufällige Position

mWorld = tbMatrixTranslation(vSpherePosition);
g_pD3DDevice->SetTransform(D3DTS_WORLD, D3DMATRIX*)(&mWorld));

// Das Material für diese Kugel erstellen

D3DMATERIAL9 Material2
Material.Diffuse = tbColor(0.75f, 0.75f, 0.75f);//fast weiß

Material.Ambient    = tbColor(0.25f, 0.25f, 0.25f);//Dunkel

Material.Emissive   = tbColor(0.0f, 0.0f, 0.0f);//keine eigenfarbe

Material.Specular   = tbColor(0.25f, 0.25f, 0.25f); // Dunkelgrau

Material.Power  =  5.0f;        // Glanzfaktor


// Das Material einsetzen

g_pD3DDevice->SetMaterial(&Material);
// Die Kugel zeichnen

g_pSphereModel->DrawSubset(0);

Wenn ich das kompiler, dann generiert er zufällig Bilder und zeigt diese an. Meine Kameraposition wechselt ständig für einige wenige Frames

ext

Treue Seele

  • Private Nachricht senden

8

14.05.2006, 16:55

Das liegt aber nicht an dem Auszug, der ändert ja nichts an den kameraeinstellungen.

Was klappt mit dem Zufallsgenerator nicht?

Werbeanzeige