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

Aktuelle Zeit: Do Mär 28, 2024 10:07

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Jan 19, 2012 16:38 
Offline
DGL Member

Registriert: Fr Nov 23, 2007 00:02
Beiträge: 29
Hallo Leute,

ich bräuchte gerade für ein Projekt eine Iso Darstellung. Die Darstellung funktioniert ja grundsätzlich schon. Nur jetzt stehe ich vor dem Problem wie ich dann Mausklicks wieder in das Game Koordinatensystem umrechne.

Es ist so dass das Gamekoordinatensystem ja nicht mehr orthogonal ist. Sondern die Achsen einen Winkel von mehr als 90 Grad haben. (ist ja soweit normal bei sowas nehme ich an)

Ich dachte mir jetzt dass ich den Vektor der geklickt wurde, einfach auf die neuen Achsen projiziere. Die Projektion die ich kenne ist jetzt aber leider nur orthogonal.

Hätte jemand für mein Probleme eine Lösung oder vielleicht einen allgemein besseren Ansatz?
Habe bis jetzt noch nichts gefunden was ich verstanden hätte.

Danke für eventuelle Infos
Daniel


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 19, 2012 17:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
also wie ich das verstehe geht es darum, objekte oder irgendwas im bild auszuwählen. hast du dir das color-picking tutorial angeschaut? ich hab das auch ohne shader hinbekommen und bin kein großartiger programmierer: http://wiki.delphigl.com/index.php/Tuto ... ing_Shader

jenachdem was du vorhast sollte das klappen^^ hoffe ich hab dich richtig verstanden

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 19, 2012 19:08 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Schau dir mal gluUnProject an. Den Wert für die Z-Koordinate (Tiefe) musst du gegebenenfalls mit glReadPixels auslesen.

Edit: Ich merk' grad, dass wir hier ja im Mathematik-Forum sind, was nicht ungedingt mit OpenGL zusammenhängen muss. Also entweder schaust du wie gluUnProject implementiert ist, oder ignorierst meinen Post und machst es so wie Coolcat es beschreibt. Ich denke mal das Ergebnis sollte gleich sein.


Zuletzt geändert von Schläfer am Do Jan 19, 2012 20:36, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 19, 2012 20:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Die nötige Projektionsmatrix für eine isometrische Projektion findest du z.B. hier:
http://trevinca.ei.uvigo.es/~formella/d ... de112.html

Da rechnest du nun noch deine Kameramatrix dran (multiplizieren) und invertierst das ganze. Dann nimmst du zwei Punkte unter dem Cursor (einen vorne, einen hinten) und führst einfach die Projektion mit der invertierten Matrix aus. Im wesentlichen machst du also das was normalerweise passiert rückwärts.
Code für Matrixmultiplikation und Matrix-Invertierung usw. findest du beispielsweise hier:
viewtopic.php?f=13&t=9296

Wenn du CoolMath (C++) benutzt würdest im Code ungefähr so aussehen:
Code:
  1.  
  2. Vector2f cursor(cursorX, cursorY);
  3. Vector2f viewport(viewportWidth, viewportHeight);
  4.  
  5. cursor = (2.0f * cursor / viewport) - 1.0f;
  6. Matrix44f backProjection = (modelviewMatrix * projectionMatrix).inverse();
  7. Vector3f front = backProjection.project(Vector3f(cursor.x, cursor.y,-1));
  8. Vector3f back = backProjection.project(Vector3f(cursor.x, cursor.y, 1));
  9.  
  10. Vector3f rayOrigin = front;
  11. Vector3f rayDirection = (back - front).normalized();

Im wesentlichen also ein 4-Zeiler....wenn du ne Mathelib wie CoolMath benutzt ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 19, 2012 23:06 
Offline
DGL Member

Registriert: Fr Nov 23, 2007 00:02
Beiträge: 29
Hallo Leute und gleich einmal danke für Infos. Wirklich sehr nett von euch.

Mein Problem ist jetzt noch dass ich nur im 2D Bereich arbeite. Soweit ich das verstehe habe ich keine modelViewMatrix und dergleichen.
Glaube daher dass ich wohl eher nur das Color Picking benutzen könnte.

Das zusammen bauen der Map funktioniert ja grundsätzlich schon ganz gut. Habe euch damit man es sich besser vorstellen kann ein Screenshot und ein Cube angehängt.

Code:
  1.  
  2. //ausrechnen der Achsen Vektoren
  3. float rad = angle*M_PI/180;
  4. m_GridXUnit = ci::Vec2f(m_length*acos(rad), m_length*asin(rad));
  5. m_GridYUnit = ci::Vec2f(-m_length*acos(rad), m_length*asin(rad));
  6.  
  7. //so wird die position des aktuellen Tiles ausgerechnet (das +1 ist nur weil ich den unteren Punkt des Cubes haben will, und nicht den oberen verdeckten)
  8. ci::Vec2f positionInScreenCoords = m_FromScreenOriginToGameGridOrigin + (x+1) * m_GridXUnit + (y+1) * m_GridYUnit;
  9.  


Würde das mit der ModelViewMatrix von CoolCat trotzdem gehen im 2D Bereich?
Versuche auch gerade mit anhand der Umrechnung oben eine Formel dafür zu bauen...geht aber irgendwie nicht so...

thx und lg
Darian


Dateianhänge:
Dateikommentar: Das hier ist ein einzelner Cube den ich benutze um die Map zu bauen...
cube.png
cube.png [ 2.54 KiB | 12521-mal betrachtet ]
Dateikommentar: Das ist ein derzeitiger Test Screenshot
screenshot.png [236.99 KiB]
Noch nie heruntergeladen
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 20, 2012 15:42 
Offline
DGL Member

Registriert: Fr Nov 23, 2007 00:02
Beiträge: 29
Danke Leute, ich habe es bereits geschafft.

Habe es anhand verschiedener inversen Funktionen geschafft zwischen nicht orthogonalen und orthogonalen System umzurechnen.

Werde eure Methoden trotzdem noch genauer probieren und abchecken. Denke gerade Color-Piking könnte man öfter mal brauchen.

Danke noch einmal.
Darian


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 20, 2012 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Würde das mit der ModelViewMatrix von CoolCat trotzdem gehen im 2D Bereich?

Meine Methode funktioniert immer, solange sich die Projektion als Matrix angeben lässt. Das sollte in deinem Fall der Fall sein.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Mathematik-Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.048s | 19 Queries | GZIP : On ]