Terrain oder Kamera verschieben?
-
Hey!
Soll ich bei einem 3D Spiel nun das Terrain drehen und translieren oder die Kamera, um sich zu bewegen? Ich habe davon gelesen, das Terrain zu drehen, jedoch:
Wenn man dann nicht mehr im Mittelpunkt des Terrains ist, dreht es sich trotzdem dort, anstatt auf dem Fleck, wo dann der Spieler steht.
Und ist es nicht rechenintensiver, das große Terrain zu translieren anstatt die Kamera?
MfG
-
ist es nicht rechenintensiver, das große Terrain zu translieren anstatt die Kamera
jeder eckpunkt eines mesh wird immer mit der gesetzten transformationsmatrix multipliziert - und diese matrix beinhaltet deine kameramatrix.
Wenn man dann nicht mehr im Mittelpunkt des Terrains ist, dreht es sich trotzdem dort, anstatt auf dem Fleck, wo dann der Spieler steht.
erst den ursprung dorthin verschieben wo du drehen willst, dann drehen, dann dahin verschieben wo's hin soll.
im endeffekt also zwei matrizen; die kannst du multiplizieren und hast wieder eine.
-
Wenn man den Spieler (die Kamera) bewegt und nicht die Welt,
ist es nicht so dass man dann nicht so leicht Verdeckungstests (ja, ich meine occlusion testing) durchführen kann, da man jeden Frame die Frustumseiten neu berechnen muss?
-
Hmm, und wie "bindet" man eine Matrix an ein Objekt? Hab grade keine Gelegenheit viel rumzutesten...
Muss man einfach vor dem rendern des jeweiligen Objekts
d3dDev->SetTransform(D3DTS_WORLD, &xMat);
setzen? Wobei xMat eine beliebige Transformationsmatrix ist.
Und was bringt D3DXMatrixIdentity(&xMat); ?
MfG
-
Das setzt die Matrix auf ihre Identität
http://mathworld.wolfram.com/IdentityMatrix.htmlThe identity matrix is a matrix in which all coefficients are 0 except the [1,1][2,2][3,3][4,4] coefficients, which are set to 1. The identity matrix is special in that when it is applied to vertices, they are unchanged. The identity matrix is used as the starting point for matrices that will modify vertex values to create rotations, translations, and any other transformations that can be represented by a 4 x4 matrix.
Quelle:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/D3DXMatrixIdentity.asp
-
Aha. Also damit wird die Matrix sozusagen initialisiert? Ist es zwingend nötig?
Und stimmt das, was ich oben geschrieben habe mit SetTransform?
-
damit wird die Matrix sozusagen initialisiert?
Ist es zwingend nötig?du kannst auch den speichermuell der initial an der matrix steht drinlassen - eine sonderlich nuetzliche transformation sollte man davon aber nicht erwarten

"D3DXMatrixIdentity" initialisert die matrix so, dass sie neutrales element ist, dh M*v=v
jetzt waere uebrigens der ideale zeitpunkt, diverse luecken in linearer algebra aufzufrischen...
-
Hehe ok. Danke!
-
Ach, komisch, hier steht was von Kamera bewegen:
http://www.zfx.info/Tutorials.php?ID=9
Muss die Kamera nicht still stehen? Oder darf man sie zB. im Orbit um den Spieler bewegen?
Oder sollte man die Welt und alle Objekte so bewegen, dass es aussieht als würde man die Kamera bewegen??
MfG
Edit:
Also wie ist es nun?PROJECTION sollte man nicht mehr verändern.
VIEW darf man verändern?
-
Es ist egal, ob du die Kamera oder die Welt bewegst. Alles ist relativ!
-
Dass man Projection nicht verändern darf, ist natürlich Blödsinn. Man darf alles verändern. Wenn man ein Fernglas macht, verändert man gerne dazu den Öffnungswinkel der Kamera.