Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 17:38

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 44 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Camera Drehung
BeitragVerfasst: Sa Jun 20, 2009 15:40 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ich habe mich einige Zeit der nachweislich falschen Vorstellung hingegeben, meine Camera würde sich korrekt bei der Bewebung durch den Raum verhalten. Nachdem mir nun aber immer öfter aufgefallen ist, dass es Stellen gibt, an denen sie sich vollkommen absurd verhält, bin ich derzeit dabei, dieser Frage nachzugehen.

Ich benutze zur Justierung meiner Camera gluLookAt.

Ich habe also die Vectoren eye,center und up.

Generell können diese Vektoren über verschiedene Bewegungsmodi von außen verändert werden (zb. durch Pfade, sie können konzentrische Kreise ablaufen usw) oder sie werden direkt durch Key und Mouseevents beeinflusst. Die automatische Veränderung über Bewegungsmodi funktioniert fehlerlos. Lediglich die manuelle Modifikation über die Events, also das benutzerdefinierte Navigieren durch die Szene per Pfeiltasten und Maus, weist einige Schwierigkeiten auf:

Code:
  1.     public void keyPressed(KeyEvent e)
  2.     {
  3.         Vector3f direction = Vector3f.SubtractVector(changedCenter,changedEye);
  4.         direction.Normalize();     
  5.        
  6.         Vector3f normalDirection = Vector3f.CrossProductVector(changedUp,direction);
  7.         normalDirection.Normalize();       
  8.        
  9.         switch (e.getKeyCode())
  10.         {
  11.             case KeyEvent.VK_UP:
  12.             {
  13.                 changedEye.AddVector(direction);           
  14.                 changedCenter.AddVector(direction);        
  15.                 break;
  16.             }
  17.    
  18.             case KeyEvent.VK_DOWN:
  19.             {
  20.                 changedEye.SubtractVector(direction);          
  21.                 changedCenter.SubtractVector(direction);           
  22.                 break;
  23.             }
  24.            
  25.             case KeyEvent.VK_RIGHT:
  26.             {
  27.                 changedEye.SubtractVector(normalDirection);        
  28.                 changedCenter.SubtractVector(normalDirection);         
  29.                 break;
  30.             }
  31.            
  32.             case KeyEvent.VK_LEFT:
  33.             {
  34.                 changedEye.AddVector(normalDirection);         
  35.                 changedCenter.AddVector(normalDirection);          
  36.                 break;
  37.             }
  38.         }      
  39.        
  40.         System.out.println("Eye: "+changedEye.toString());
  41.         System.out.println("Center: "+changedCenter.toString());
  42.         System.out.println("Distance: "+Vector3f.SubtractVector(changedCenter,changedEye).getLength());
  43.     }


Soweit ich das nun mehrfach theoretisch durchgegangen bin, sollten diese Berechnungen für die Pfeiltasten stimmen. ArrowUp bewegt die Camera etwas auf den Blickpunkt zu. Damit sie nicht irgendwann am Blickpunkt ankommt, wird der Blickpunkt um den gleichen Weg weiter bewegt. Analog zu ArrowDown. Left und Right bewegen die Camera und den Blickpunkt auf einer Normalen zur Blickrichtung seitlich.


Code:
  1.  
  2.     public void mouseDragged(MouseEvent e)
  3.     {
  4.         Vector3f direction = Vector3f.SubtractVector(changedCenter,changedEye);
  5.         float distance = direction.getLength();
  6.    
  7.        
  8.        
  9.         if (lastPosition.x != e.getPoint().x)
  10.             direction.RotateVectorY((e.getPoint().x-lastPosition.x)*GLTools.DEG2RAD/10);
  11.         if (lastPosition.y != e.getPoint().y)
  12.             direction.RotateVector(Vector3f.CrossProduct(up,direction),(e.getPoint().y-lastPosition.y)*GLTools.DEG2RAD/10);
  13.  
  14.         changedCenter = Vector3f.AddVector(changedEye, direction);
  15.         lastPosition = e.getPoint();
  16.        
  17.  
  18.         //System.out.println("vector: "+Vector3f.CrossProductVector(up, direction).toString());
  19.         System.out.println("Direction: "+direction.getLength());
  20.         System.out.println("Eye: "+changedEye.toString());
  21.         System.out.println("Center: "+changedCenter.toString());
  22.     }


Hier offenbahrt sich das Problem, das sich mir nicht erschließen will. Die Drehung entlang der Y Achse, also nach links und rechts, funktioniert fehlerfrei.
Die Drehung nach oben und unten , also entlang einer Achse, die auf einer Ebene liegen muss, die Paralelle zur x-z-Ebene liegt, funktioniert einfach nicht.

Der Gedanke, der hinter der angegebenen Rechnung steht, ist der folgende:
Direction ist der Vector zwischen Eye(Camera) und Center(Blickpunkt).
Direction soll nun nach oben oder unten rotiert werden. Dazu benötige ich einen Vector, um den Rotiert wird. Dieser Vektor, ist das Kreuzprodukt aus dem Up-vector und direction, da er auf beiden Senkrecht stehen muss.

Soviel die Theorie. Wenn ich die zweite Drehung ausklammere, funktioniert die Camera (, sie dreht sich - oh Wunder - nur eben nicht nach oben und unten), wenn sie mit einbeziehe, setzen sich plötzlich alle Werte auf NAN.

Ich habe mir bereits mal das Kreuzprodukt ausgeben lassen, um zu sehen, ob es null wird. Es wird nicht null, ist also definiert. Daher verstehe ich partout den Fehler nicht....

Weiß jemand Rat?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 08:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich möchte Dir die folgenden beiden Tutorials im DGL Wiki ans Herz legen, denn da drinnen ist m.E. genau Dein Problem behandelt:

1.Tutorial "Objekt gedreht und dennoch nach vorne bewegt"
2.Tutorial "Objekt immer um eigene Achse drehen"

Sie stehen ein bissel weiter unten, in der Mathesektion.
Viele Grüße
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 08:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
du brauchst für deine Cam eine vollständige Orientierung, also ein Koordinatenkreuz bestehend aus right, up, front und position vektor. Diese werden bei merstellen einer Camera auf identität geladen also front = (0,0,-1), up = (0,1,0), right(1,0,0), pos = (0,0,0). Das kann man perfekt in eine matrix packen von der größe 4x4. Wenn du jetzt eine seitliche Bewegung durchführen möchtest, also in gamer-sprech ein sidestep/strafe, brauchst du bloß den right-vektor mit der geschwindigkeit mulipliziert auf den positionsvektor addieren. für die front bewegung ist das selbe von nöten.
möchtest du jetzt allerdings eine rotation um die y-Achse machen (meist ist die World-Y-Achse gefragt), dann drehst du den right und den front vekor um (0,1,0) via quaternion rotation. Das hört sich zunächst schwer an, ABER hier im wiki findest du einen kompleten funktions-satz zu quaternions, die man 1:1 übernehmen kann und die rotation kann ich dir hier auch ohne Probleme erklären, falls du das noch brauchst.
Wenn du die rotation um die World-Y-Achse performt hast, dann kannst du anschließend Front- und Up-Vektor um besagten Winkel um den Right-Vektor drehen. das resultat ist eine Camera, die sich wie eine FirstPersonCam verhält.
Die Funktionen um die Bewegungen über die tastatur zu steuern gehört mines erachtens nicht in die Cam sondern in einen gesonderten Interface-Buffer, der alle tastatureingaben bfängt und anschließend an die Cam weiterleitet wenn der Anwendungszustand gerade eine Camerabewegung verlangt. Wenn du einen Mouselook einbauen willst kann ich dir auch gerne erklären wie das geht, denn bei mir hat sich schnell das Problem eingestellt, dass die optik dann ins ruckeln und stocken gerät. Das einzige Problem, das ich bisher noch nicht gelöst habe ist, die Camera auf einen Punkt auszurichten, der kein eigenes Koordinatenkreuz besitzt.
Nachdem alle Camera-transformationen ausgeführt sind (bewegen,links/rechts-schwenk,hoch/runter-schwenk) solltest du die darauß entstandende Matrix direkt als ModelviewMatrix zu begin des Renderns laden um nicht alle transformationen dopplt machen zu müssen ( glMatrixMode(GL_MODELVIEW); glLoadMatrix(myCamMatrix); ). danach kannste fröhlich laufen/fliegen in deinen 3d szenen.

Bei weiteren Fragen, einfach los fragen, für die meisten Dinge hab ich beim Thema Cam Antworten.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 10:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
Das einzige Problem, das ich bisher noch nicht gelöst habe ist, die Camera auf einen Punkt auszurichten, der kein eigenes Koordinatenkreuz besitzt.
Da hast Du oben aber schon schwerere Probleme gelöst. Die Kamera auf einen Punkt ausrichten macht gluLookat (Quelle: Source Code Mesa 7.2):

Code:
  1. void GLAPIENTRY
  2. gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx,
  3.       GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy,
  4.       GLdouble upz)
  5. {
  6.     float forward[3], side[3], up[3];
  7.     GLfloat m[4][4];
  8.  
  9.     forward[0] = centerx - eyex;
  10.     forward[1] = centery - eyey;
  11.     forward[2] = centerz - eyez;
  12.  
  13.     up[0] = upx;
  14.     up[1] = upy;
  15.     up[2] = upz;
  16.  
  17.     normalize(forward);
  18.  
  19.     /* Side = forward x up */
  20.     cross(forward, up, side);
  21.     normalize(side);
  22.  
  23.     /* Recompute up as: up = side x forward */
  24.     cross(side, forward, up);
  25.  
  26.     __gluMakeIdentityf(&m[0][0]);
  27.     m[0][0] = side[0];
  28.     m[1][0] = side[1];
  29.     m[2][0] = side[2];
  30.  
  31.     m[0][1] = up[0];
  32.     m[1][1] = up[1];
  33.     m[2][1] = up[2];
  34.  
  35.     m[0][2] = -forward[0];
  36.     m[1][2] = -forward[1];
  37.     m[2][2] = -forward[2];
  38.  
  39.     glMultMatrixf(&m[0][0]);
  40.     glTranslated(-eyex, -eyey, -eyez);
  41. }


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 21:18 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Also ich habe mich jetz mal ne weile mit den Tuts beschäftigt und auhc ein bisschen rumprobiert aber eigentlich versteh ich nich, wieso das ganze nicht auch einfach weiterhin mit meinen 3 Vectoren und gluLookAt gehen soll.
Wenn ich meiner Camera eine Position und einen Blickpunkt gebe und ihr sage wo oben ist, ist das realtive Koordinatensystem doch eindeutig definiert. Nur die Berechnung des Blickpunktes its bei mir momentan an einer stelle noch fehlerhaft.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 22:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Mag sein, dass es so auch so geht mit ein wenig hin und her rechnen, allerdings werden alle deine Camera translationen/rotationen in die ModelViewMatrix eingerechnet, also warum solltest du nicht direkt diese berechnen, wenn dieser Weg performanter ist und nicht unbedingt mehr code braucht? Anstatt bei jedem Render die Modelviewmatrix mit ihrer Identität zu laden und anschließend alle Transformationen zu berechnen und durchzuführen kannst du auf diese weiße einfach alle Camera-Veränderungen direkt in die ModelVieMatrix übertragen und sparst dir so Berechnungen und hast einen etwas saubereren Code. Desweiteren kannst du mit der Kenntnis über alle Achsen deiner Camera-Orientierung verschiedenste Bewegungsmöglichkeiten wie z.B. das Strafen, oder Kamerafahrten auf Splines/bezier-curves schneller implementieren, als wenn du ständig aus deinem Up-Vektor und dem Blickpunkt in jedem Frame die nötigen Vektoren dafür errechnen musst. Ebenso lohnt es sich die Matrix für Billboarding zu kennen, da du dafür nur die Cameratransformationen invertieren musst und sie auf ein Quadrat anwendest.

Glaube mir es lohnt sich diesen kleinen Aufwand einmal zu machen. Der einzige unterschied zu deinen aktuellen Daten ist, dass der "Blickpunkt" normiert wird und Front-Vektor heißt und, dass ein Right-Vektor dazu kommt. Das wichtigste Argument ist aber, dass mein Weg funktioniert und deiner nicht. <= ist nicht so böse gemeint wie es sich liest :)

PS: wenn es dir momentan noch einfacher ist die Tastatureingaben direkt in der Camera-klasse abzuarbeiten, tu das. Bis zu einer gewissen Projektgröße spielt das keine wichtige Rolle, aber irgendwann wirst du das trennen müssen um in verschiedensten Situationen auf zum Beispiel doppelt belegte Tasten reagieren zu können deren Funktion sich nur anhand des aktuellen Programmzustandes unterscheidet. Wenn du möchtest kann ich dir auch gerne meine Camera einmal als Code hier reinstellen damit du mal schauen kannst wie ich das gemacht habe, denn viel Code ist es im Endeffekt nicht geworden.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 23:13 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Also die Bewegung der Camera auf Pfaden hab ich schon implementiert und das Billboarding auch. Alles in allem verstehe ich aber die Vorteile der geringeren Rechenlast. Wenn ich das richtig verstanden habe, würde auf diese Weise jede Camera eine Matrix besitzen, die Position und Ausrichtung angibt und durch das LAden dieser Matrix ist im Grunde schon alles abgeschlossen. Dadurch würde gluLookAt dan unter den Tisch fallen oder?

Also es wär mir schon hilfreich, wenn ich mal etwas abschauen könnt^^ Ich hab bisher die Funktionen aus der Geometry erstmal nachgebaut und anfangen, das ganze in meinem Code zu implementieren.

Danke dir schonmal


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 08:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Sellmann hat geschrieben:
Das wichtigste Argument ist aber, dass mein Weg funktioniert und deiner nicht. <= ist nicht so böse gemeint wie es sich liest

Naja, aber prinzipiell sollte sein Weg doch funktionieren. Aber klarerweise ist Dein Ansatz natürlich besser, weil man damit mehr Möglichkeiten hat.

@Shaddow: Ich würde Dir ja helfen, aber ich kann Deinen Code nicht lesen. Quintessenz ist, Du hast 2 Vektoren und willst um einen dritten rotieren. Dagegen ist ja eigentlich nichts einzuwenden.

Tatsache ist dass mich Dein Betrag dazu angeregt hat, eine Kamera zu implementieren, die nach Sellmanns Prinzip funktioniert. Aber NATÜRLICH gehe ich nach denselben Prinzipien vor wie Du: ich muss auch zwei Vektoren um einen Dritten rotieren - und Sellmann muss das ganz genauso machen, denn es gibt keinen Weg drum herum. Daher wäre es vielleicht möglich, dass Du auf Deinen Fehler draufkommst, wenn ich Dir ein Codeschnipsel zeige (sorry, ich habe nicht alle Typdefinitionen hier drin, damit der DemoCode nicht zu lang wird):

Code:
  1. Procedure TSystem3D.Rotate;
  2. Var RotMat,RotMatX,RotMatY: TStdMatrix;
  3. Begin
  4.    If AngleX <> 0
  5.       Then RotMatX:= MatrixRotate(AngleX,DefaultRight)
  6.       Else RotMatX:= MATIDENTITY;
  7.  
  8.    If AngleY <> 0
  9.       Then RotMatY:= MatrixRotate(AngleY,DefaultUp)
  10.       Else RotMatY:= MATIDENTITY;
  11.  
  12.    RotMat:= MatrixMultiply(RotMatY,RotMatX);
  13.  
  14.    CurRight:= VectorTransform(RotMat, DefaultRight);
  15.       CurUp:= VectorTransform(RotMat, DefaultUp);
  16.  
  17.    If InversSystem
  18.       Then CurForward:= VectorCrossProduct(CurUp,CurRight)
  19.       Else CurForward:= VectorCrossProduct(CurRight,CurUp);
  20. End;


Mit dieser Funktion kann ich sowohl Objekte rotieren als auch die Kamera (diese ist ein "InversSystem"). "DefaultRight" und "DefaultUp" sind die Default-Achsen des jeweiligen Systems, bei einer Kamera also der X-PlusVector und der Y-PlusVector, der "DefaultForward" wäre der Z-MinusVector. Und das Ganze ist ein 4 DOF-System (man kann sich frei um 2 Achsen bewegen).


Es ist bei einem solchen Vorgang SEHR wichtig, dass:
1. bei Matrizenmultiplikationen die Reihenfolge der Matrizen richtig ist und
2. beim Kreuzprodukt die Reihenfolge der Input-Vektoren richtig ist


@Flash: Es ist ein neuer Wiki-Artikel fällig: "Wie man eine 6 DOF Kamera implementiert". Das wäre eine nette Erweiterung für den Engine-Pfad. Na, findet sich einer, der so etwas schreibt? Ich kann das bestimmt nicht. Mach sicher lauter Fehler rein. :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 08:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
was heißt den 6DOF? dof kenn ich nur als depth-of-field, macht aber in dem Zusammenhang für mich keinen Sinn...

Edit: Gut das man per Google direk in Phobeus's Gehirn nachblättern kann: 6dof = six degrees of freedom

Ich lese mir mal durch, was damit genau gemeint ist und schau mal an wie das geht und ob ich das kann.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 08:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
6DOF = 6 degrees of freedom, also 6 Freiheitsgrade. Man hat drei Achsen und kann sich bei jeder Achse sowohl links rum als auch rechtsrum bewegen, ergibt 6 mögliche Rotationen. (Um die Bewegungsrichtung zu ändern kannst Du entweder einen negativen Winkel eingeben oder die Drehachse invertieren)

WICHTIG: wir manchen das hier NICHT mit Euler-Winkeln, denn sonst wäre die Kamera nicht stabil.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
in wiefern nicht mit eulerwinkeln? Das die daten nicht als winkel gespeichert werden sollen, oder das die rotation nicht anhand von winkeln durchgeführt werden darf? Oder unterscheidest du da einfahc nur Grad und Radiant? Weil meine Rotation ist bisher in Radiant um eine Achse aus der Camera-Orientierung und klappt soweit echt gut. Ich mache das einfach mal so, dass ich eine anwendung hochlade und ihr sagt mir dann, ob es das ist was ihr meint.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 18:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Das ist so gemeint: Es sollte die Kamera-Orientierung nicht mit Winkeln abgespeichert werden, sondern mit Vektoren, genauer: zwei der drei lokalen Koordinatenachsen der Kamera.

Zu Beginn sind die Kamera-Achsen mit den Welt-Achsen identisch. Der Benutzer gibt an, welche Transformation er ausführen will, zum Beispiel eine Drehung nach rechts, das heißt: Drehachse ist die Y-Achse der Kamera, derzeit auch die Y-Welt-Achse, als Winkeländerung legen wir z.B. "1" fest. Soll heißen, bei jedem Tastendruck wird der Winkel um "1" geändert.

Wir haben z.B. auch festgelegt, dass immer der UpVector und der Forward-Vector gespeichert sind. Fehlt uns nocht der Right-Vector, den kriegen wir über das Kreuzprodukt.

Die beiden Kamera-Achsen, um die jetzt nicht gedreht wird - also der Forward-und der Right-Vektor - werden beide um ein Grad um den Up-Vektor gedreht. Da kann m.E. überhaupt nichts passieren. Der neue UpVector ergibt sich wieder als Kreuzprodukt der beiden anderen.

Weil die Kamera-Achsen aber jetzt beliebige Achsen sind, kann man keine Euler-Winkel mehr nehmen, sondern Rotationsmatrizen, die aus einer Winkel/Achse Angabe errechnet werden können oder eben aus Quaternionen.

Die Rotationsmatrix der Kamera ergibt sich aus den drei neu berechneten lokalen Kamera-Rotationsachsen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 19:13 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Ich mach das bei mir mit Quaternionen, weil mir Rotationsmatrizen irgendwie suspekt sind, Aber an sich funktioniert es bei mir genau so, wie du es beschrieben hast, mit Ausnahme, dass ich eben auch den rightvektor immer mit speicher. Allerdings baue ich gerade zwei Rotations-Modi. Einmal den Modus der um die bekannten Achsen der Kamera dreht und einmal den Modus, der immer um (0,1,0) dreht, egal wie der top, vektor steht. Die Rotation um die eigenen Achsen ist ne simple Spielerei, bei der Drehung um die (0,1,0) ist es aber schon was ganz anderes, denn die Rotation wird gespiegelt, sobald die Camera einen überschlag macht. Falls du eine Idee haben solltes, wie man feststellt, ob die Kamera überkopf steht, sofort her damit. Dann muss nur noch das look_at rein und sie ist reibungslos fertig.

Edit: Problem gelöst:

Code:
  1.  
  2.  
  3. if FOrigin.top.y < 0 then angle := -angle;
  4.  
  5.  

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 19:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hmm, was meinst Du mit "einen Überschlag macht"? Wenn ich um (0/1/0) drehe, ist das Ergebnis immer definiert. Ich drehe so, wie OpenGL dreht: ich gebe einen Winkel und eine Achse an und erzeuge eine Rotationsmatrix draus.

EDIT: die Kamera-Achsen sollten immer ein orthogonales System bilden, also alle einen rechten Winkel zueinander haben.

EDIT2: Du könntest Dich bei der Lösung oben irren: Du berechnst die Spitze des Y-Vektors, oder? Was ist, wenn die Kamera im positiven Y-Bereich überkopf steht? Da müsste man die Differenz Kamera-Position zur Spitze des Y-Vektors ansehen, das könnte gehen.

Aber wozu brauchst Du diesen zweiten Modus?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 19:44 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Also ich verfolge die Diskussion interessiert, stehe aber schon seit einigen Posts ziemlich im Wald..

Irgendwie fehlt mir grad ziemlich der Einstieg das ganze irgendiwe umzusetzen. Mit meinen Vektoren erschien mir das alles so nachvollziehbar und logisch, Matrizen geht grad noch so, aber spätestens bei Quaternation hörts bei mir ziemlich auf und ich kann euch inzwischen nichtmehr folgen^^


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 44 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]