Seite 1 von 1

[Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 27.06.2012, 13:34
von Stimpy
Hi,

ich habe eine kleine sehr simple Camera-Klasse die auch alles macht was ich haben will an Steuerungs-Möglichkeiten. Im Prinzip mache ich mit der Camera lediglich:

Code: Alles auswählen

public function updatePosition():void
		{
			var m:Matrix3D = new Matrix3D;
			m.invert();
			m.appendRotation(neigung, Vector3D.X_AXIS);
			view.identity();
			view.appendTranslation(position.x, position.y, position.z);
			view.append(m);
			
			getFrustum();
		}
Also eine Rotation auf der X-Axis und dann * Translate zur Position. Fertig ist meine ViewMatrix.

Nun habe ich allerdings nirgends eine View-Direction kalkuliert. Kann ich das ViewDir aus der Matrix extrahieren oder anhand der X-Rotation berechnen? Ich würde meine Camera eigentlich gerne so simpel lassen :roll: Ich weiß das es auch möglich ist über position + target und pointAt usw. die View-Matrix komplizierter zu bilden, aber das ist eigentlcih alles nicht nötig - Sofern ich weiß wohin ich schaue.

Letzendlich benötige ich die Entfernung in die Richtung in die Ich schaue zum nächsten Objekt.

Im voraus vielen Dank, wenn hier jemand helfen kann.

Grüße

Stimpy

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 27.06.2012, 14:26
von waigie
Sollte eigentlich recht einfach gehen in dem du deinen ursprünglichen Sichtvektor mit der Rotationsmatrix multiplizierst. Ich gehe mal davon aus du schaust in Richtung der Y-Achse
Also in etwas so (ich kann kein Actionscript also bitte nicht nach fehlern suchen)

Code: Alles auswählen

public function getViewDirection():Vector3D
{
	var m:Matrix3D = new Matrix3D;
	m.appendRotation(neigung, Vector3D.X_AXIS);
	return Vector3D.Y_AXIS * m;
}

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 27.06.2012, 22:52
von dot
Die dritte Zeile bzw. Spalte der Matrix ist, was du suchst.

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 28.06.2012, 15:31
von waigie
Äh ja genau. Die y-Achse als Sichtrichtung ist quatsch. Z sollte es sein und da bekommst du dann die letzte Spalte der Matrix ^^

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 04.07.2012, 14:01
von joeydee

Code: Alles auswählen

var m:Matrix3D = new Matrix3D;
m.invert();
Ist eigentlich sinnlos, ne Einheitsmatrix zu invertieren...;-)

Meine Antwort kommt ein bissel spät, aber falls du noch Implementierungsdetails suchst:
Hier gibts ein Bildchen über der Aufbau der Flash-Matrix3D und wo die Achsen stecken (im Bild zu sehen: 3. Spalte ist Z-Achse). Was nicht ganz stimmt, ist dass man direkt die Scale-Werte auslesen kann. Die müsste man aus der jeweiligen Achsenlänge ermitteln.
Ab FP11 gibts Matrix3D.copyColumnTo() um direkt einen Vektor zu extrahieren, ansonsten über rawData.
Im rawData-Vektor (die Matrix wird spaltenweise ausgelesen) wären es dann die Werte 8-11.

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 05.07.2012, 12:33
von Stimpy
Vielen Vielen Dank für die konstruktiven Antworten, ich werde morgen einmal probieren ob ich damit dann endlich mein Shader fertig bekomme.

Großes Danke :)

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 30.07.2012, 14:41
von Stimpy
Hmmm, scheinbar bin ich mal wieder zu dämlich. Laut joydee hab ich in der rawData 8,11 also die ViewDir - Dann muss ich doch mein Ray so konstruieren:

ray.ray_origin = new Vector3D(position.x, position.y, position.z); // Cam Position
ray.ray_dir = new Vector3D(view.rawData[8], view.rawData[9], view.rawData[10]); // Cam Dir

Aber damit treffe ich in meiner Szene überhaupt keine Box?!?! Was ist daran aber falsch?! :(

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 30.07.2012, 16:10
von joeydee
Ich sehe das jetzt erst im Betreff: du nimmst ja die View-Matrix. Du musst die Welt-Matrix der Kamera benutzen, die View ist die Inverse davon (jedenfalls ist das gängigerweise das V in der MVP-Gleichung, ich weiß ja nicht was du da evtl. anders verwendest und benennst).
Also entweder View nochmal invertieren oder besser gleich vorher die Kamera abgreifen, die solltest du günstigerweise vorliegen haben.

Übrigens: Vermeide, mehrmals auf matrix.position zuzugreifen, das ist ein Getter, der immer einen neuen Vektor liefert. Einfachste und schonendste Schreibweise wäre wohl:
rayOrigin=matrix.position;
matrix.copyColumnTo(2,rayDirection);

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Verfasst: 09.10.2012, 07:39
von tysonlee
<Ein Bot hat hier mal wieder einen Beitrag von anderswo reinkopiert. Entfernt und gesperrt von Schrompf>