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

1

09.05.2007, 18:14

Mehrere Weltmatrizen?!?

Hi Leute,
also ich steh grad ziemlich auf dem Schlauch!!!!!!!!!!
Ich begreife das mit der Weltmarix nicht!!!!
Also nach meiner vorstellung gibt es ja nur eine Welt, und von daher brauche ich nur eine Weltmatrix. Beim stöbern in diesem Forum lese ich aber was von Objektweltmatrizen, und dass man diese als Weltmatrix setzt oder setzen kann.
Was ist eine Objektweltmatrix bzw. wie erstelle ich sie und was kann ich dann damit anstellen?

Und noch ne Frage. Wie bewegt ihr eure Objekte? Ich bewege zum Beispiel ein Dreieck indem ich eine Translationsmatrix mit dem Bewegunsvektor des Dreiecks belege und dann jedes einzelne Vertex mit TransformCoorArray() ändere. Das kann doch aber nicht das gelbe vom Ei sein, oder? Bei vielen Tausend Vertices ist das doch sehr ineffizient. Wenn ich nämlich die Translationsmatrix mit der Weltmatrix multipliziere bewegt sich die ganze Szene, also alle Objekte in meiner Welt (erscheint mir auch logisch).

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

09.05.2007, 18:22

Jedes Objekt hat einen eigenen Raum => Objectsspace welcher natürlich auch über eine Matrix beschrieben werden kann.
@D13_Dreinig

3

09.05.2007, 19:06

ok und wie erstelle ich die?
Und noch wichtiger, was stelle ich damit an?

Hat mir ein jemand ein kleines Beispielsource oder ein Code-Schnipsel dazu? Also z.B ein Objekt das sich im Raum bewegt und dabei Rotiert wird etc.damit ich das mit den Koordinaten besser nachvollziehen kann?

Wäre echt super.

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

4

10.05.2007, 16:58

Zitat

Und noch ne Frage. Wie bewegt ihr eure Objekte?

Weltmatrix setzen, rendern und sodurch Grafikkarte arbeiten lassen ;)
Die Grafikkarte Transformiert beim rendern alle Vertices mit der aktuellen Weltmatrix (zumindest wenn du Fixed Functions und keine Shader benutzt ... aber ich glaub das kann dir mal wurscht sein ^^)
Die Translationsmatrix kann ein Teil deiner Weltmatrix sein.

Ich denk dich hat wohl der Name Weltmatrix einbischen irritiert. Das hat sogesehn nichts mit der Welt zu tun. Mit dem Drum wird alles Transformiert was du renderst. Naja und normalerweise setzt du die bei jedem Objekt anders.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

10.05.2007, 17:12

Die Weltmatrix heißt Weltmatrix, weil sie Punkte aus dem lokalen Modellkoordinatensystem in das Weltkoordinatensystem transformiert.

6

11.05.2007, 10:06

Also, das irritiert mich doch schon etwas. Wenn ich jetzt eine Weltmatrix setze dann tu ich das doch mit:

C-/C++-Quelltext

1
2
3
D3DXMATRIX world;
D3DXMatrixTranslation(&world, xPos, yPos, zPos);
setTransform(D3DTS_WORLD, &world);


Nun kann ich doch die "Welt" mit diesen Variablen verschieben. Wenn ich nun z.B. xPos+1 mache was passiert dann?

bisher habe ich gedacht dass sich dann die ganze Welt, also auch der Ursprung des Koordinatensystems verschiebt.
so wie ich das aber jetzt raushöre werden einfach nur alle Objekte in der Szene um 1 nach rechts verschoben, und das Koordinatensystem bleibt unangetastet!?

Zitat


Die Translationsmatrix kann ein Teil deiner Weltmatrix sein.


Wie meinst du das? Muss ich die Weltmatrix mit der Translationsmatrix meines Objektes multiplizieren?
Wenn ich das nämlich tue wird trotzdem die ganze Szene verschoben und nicht nur eben diese eine Objekt.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

11.05.2007, 11:31

Problemstellung:

Wir haben ein Modell. Diese besteht aus ganz vielen 3D Punkten. Diese 3D Punkte beziehen sich allesamt auf das Koordinatensystem des Modells. Nun will ich aber dass das Modell insgesamt um 90° um die X Achse gedreht wird und um 100 Einheiten in Y Richtung verschoben wird. Wie macht man das am besten?

Lösung:

wir berechnen eine Rotations- und eine Translationsmatrix und multipilzieren sie miteinander. Dann setzen wir diese Matrix als Weltmatrix. Nun werden alle 3D Punkte um 90° um die X Achse gedreht und um 100 Einheiten in Y Richtung verschoben.

Problemstellung:

Nun haben wir ein Objekt was um 100 Einheiten in Z Richtung verschoben und ein Objekt was um 50 Einheiten in X Richtung verschoben werden soll.

Lösung:

Wir berechnen wieder die Translationsmatrix. Diesmal aber für jedes Objekt eine. Dann setzen wir erst die Weltmatrix des ersten Objektes und zeichnen das erste Objekt. Dessen 3D Punkte werden nun um 100 Einheiten in Z Richtung verschoben dargestellt. Dann setzen wir die Weltmatrix des zweiten Objektes und zeichnen dessen 3D Punkte. Diese werden nun um 50 Einheiten in X Richtung verschoben dargestellt.

Damit ist es möglich verschiedene Objekte an verschiedenen Positionen und mit verschiedenen Rotationen im Raum zu zeichnen. Man setzt einfach nur die Weltmatrix des Objektes und zeichnet es dann.

War es das, was du wissen wolltest? :) oder liege ich auch daneben?^^
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

8

11.05.2007, 13:55

Genau das ist mein Problem, aber wies aussieht steh ich sowas von aufm Schlauch!!!!!!!
Hab deine Lösungen gerade ausprobiert und wies aussieht mache ich etwas Falsch.
Habs so gemacht, dass ich nachdem ich die position des objektes verändert habe, setTransform() mit der Objektmatrix aufgerufen habe, und dass für jedes meiner Objekte.

Ich weis dass ich dich wahrscheinlich nicht richtig verstanden habe.
Könntest du mir das evtl. an einem kleinen codebeispiel veranschaulichen?

Ach und noch was?
Hab hier im Forum was über diesen genauen Timer "queryPerformanceCounter" gelesen und gleich ausprobiert.
Irgendwie scheint der bei mir nicht zu gehen, obwohl queryPerformanceFrequency läuft und mir immer die ticks pro sekunde zurücklisfert. Der Counter gibt immer false zurück. Woran kann das liegen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

11.05.2007, 17:06

die weltmatrix beschreibt nicht die welt, sondern wie sich das was grad gerendert wird zur welt verhält!

Zitat von »"Toudy"«

Ach und noch was?
Hab hier im Forum was über diesen genauen Timer "queryPerformanceCounter" gelesen und gleich ausprobiert.
Irgendwie scheint der bei mir nicht zu gehen, obwohl queryPerformanceFrequency läuft und mir immer die ticks pro sekunde zurücklisfert. Der Counter gibt immer false zurück. Woran kann das liegen?


was für einen rechner hast du (vor allem mainboard) und vor allem wie verwendest du diese funktionen (ich hab so das gefühl, dass du da evtl. was verwechselst)...

10

11.05.2007, 20:16

Ich verwende erst QueryPerformanceFrequency() um die Takte pro sekunde zu ermitteln und dann eben QueryPeformanceCount() um die Takte zu ermitteln, die meine Renderfunktion benötigt.
Ich habe ein Sony-Vaio Notebook VGN-S4M. Intel-Centrino drin. Mainboard weis ich nicht, wo schau ich ds nach?

Werbeanzeige