[Stage3D] ViewDir aus ViewMatrix ausrechnen?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Stimpy
Beiträge: 49
Registriert: 02.03.2011, 15:16
Wohnort: Seelze / Hannover
Kontaktdaten:

[Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag 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
waigie
Beiträge: 82
Registriert: 20.05.2009, 19:37

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag 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;
}
Benutzeravatar
dot
Establishment
Beiträge: 1745
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag von dot »

Die dritte Zeile bzw. Spalte der Matrix ist, was du suchst.
waigie
Beiträge: 82
Registriert: 20.05.2009, 19:37

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag 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 ^^
Benutzeravatar
joeydee
Establishment
Beiträge: 1128
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag 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.
Stimpy
Beiträge: 49
Registriert: 02.03.2011, 15:16
Wohnort: Seelze / Hannover
Kontaktdaten:

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag 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 :)
Stimpy
Beiträge: 49
Registriert: 02.03.2011, 15:16
Wohnort: Seelze / Hannover
Kontaktdaten:

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag 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?! :(
Benutzeravatar
joeydee
Establishment
Beiträge: 1128
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag 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);
tysonlee
Beiträge: 1
Registriert: 09.10.2012, 07:38
Benutzertext: nill
Alter Benutzername: 28
Echter Name: tyson

Re: [Stage3D] ViewDir aus ViewMatrix ausrechnen?

Beitrag von tysonlee »

<Ein Bot hat hier mal wieder einen Beitrag von anderswo reinkopiert. Entfernt und gesperrt von Schrompf>
Antworten