Ich habe ein Problem, das (wahrscheinlich) in den Bereich der Selektion fallen würde, ich bin mir aber nicht sicher:
Ich habe eine Heightmap geladen und möchte, dass ich die XY-Koordinaten einer Position, die ich anklicke, auf der Heightmap bekomme.
Wenn man es über Selektion machen würde, müsste man, so wie ich es verstanden habe, jedem Triangle einen Namen zuweisen, und das wäre mehr als nur umständlich und außerdem nicht so genau. Ich wollte nämlich X&Y als Fließkommazahlen.
Hat einer ne Ahnung wie ich das am besten anstelle?
Wenn unklar ist was ich meine, bitte einfach fragen.
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Die Antwort heißt glUnproject. Im Wiki dürftest du dazu ausreichend Informationen finden.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Das ist sicher schon mal der richtige Ansatz, aber ich hab leider nur die X und Y-Koordinate (Mausposition) der Fensterkoordinaten,
Z fehlt mir, da möchte ich den Z-Wert des Objektes, das am nächsen zum Viewpoint ist. (Also die Objekt-Coords der Stelle, auf die ich wirklich klicke).
Geht das irgendwie?
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Ja, ich meinte gluUnProject.
Ich versteh jetzt deinen zweiten Post nicht so richtig. Mit der Beispiel-Funktion im o.g. Wikiartikel, kannst du ja genau das erreichen, du gibst deine Mauskoordinaten auf dem Fenster ein und erhältst die 3D-Position der Maus auf dem Terrain.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Sorry ich hab nur auf die Definition geschaut und nicht auf das Beispiel wo ja schon ne Lösung gebracht wird.
Ich hab allerdings immer noch ein Problem damit: Und zwar hab ich keinen Schimmer wie die erhaltenen 3d-Koordinaten in Zusammenhang mit z.B. den Koordinaten einer der Ecken der Karte (z.B. des Ursprungs oben links in der Heightmap) stehen, ich brauch aber solche Viewpoint-unabhängigen Koordinaten um eine Einheit wie nen Soldat (soll nämlich ein Strategiespiel werden) dahin schicken zu können.
Ich hoffe du verstehst was ich meine.
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Hier ist halt ein wenig Denkarbeit angebracht. Aber wenn du weißt, wie groß dein Feld ist, wo es beginnt, und wo man geklickt hat, dürfte es ganz einfach sein. Falls dein Feld im Ursprung beginnt, dann ist es natürlich ganz einfach, dann kannst du direkt die Koordinaten, die dir gluUnProject liefert, weiterverwenden. Andernfalls musst du von diesen Koordinaten (gluU...) den Ursprung deines Feldes abziehen. Wenn du allerdings auch noch skalierst oder dein Feld irgendwie anders aufgebaut hast, musst du selber auf ne Lösung kommen, bzw du postest mal ein Bild/eine Zeichnung.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Irgendwie bekomm ich nur Zahlen aus gluUnproject heraus, die (für mich jedenfalls) nicht den geringsten Sinn ergeben, z.B. sind sie unterschiedlich, wenn man denselben Punkt aus verschiedenen Perspektiven anvisiert und die Funktion aufruft.
Meinst du ich kann hier mal nen gekürzten Quelltext posten oder es sonstwie übermitteln, damit du mir sagen kannst ob ich die Funktion falsch verwende oder irgendwie nicht richtig interpretiert habe?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also gluUnProject liefert dir genau die Koordinaten die du in deinem Objekt hast. Also wenn sich dein Quad von 0 bis 1 erstreckt bekommst du auch Werte von 0 bis 1. Das wichtige dabei ist aber, dass du auf jeden Fall die Matrizen zum Berechen brauchst die du bei dem Zeichnen des Objektes hast. Solltest du anschließend noch etwas anderes zeichnen wollen etc dann wird das Ergebniss nicht stimmen.
Mal eine kleine Veranschaulichung.
Code:
glTranslatef(0,0,-7.5);
glScalef(?, ? ,?);
glRotatef(?,1,0,0);
glRotatef(?,0,1,0);
glRotatef(?,0,0,1);
glBegin(GL_QUADS);
// Quads zeichnen
// optimaler Weise würden diese ab 0, 0 anfangen und sich nach
// 10, 10 (oder so) erstrecken
glEnd;
// um es sinnvoll berechnen zu können brauchst du die Matrizen
// von DIESEM Punkt. Also da wo du deine Map zeichnest.
// Wichtig ist nur, dass du die ModelView nicht veränderst.
// Auch nicht beim Zeichnen deiner Map.
glTranslatef(0,0,-7.5);
glScalef(?, ? ,?);
// An dieser Stelle (und nachfolgend) wären die Matrizen schon verändert
// und die Berechnung würde keine richtigen Ergebnisse mehr liefern.
glBegin(GL_QUADS);
// Weiter Flächen zeichnen
glEnd;
Als kleine Anmerkung. Der Viewport und die Projektion ändern sich normalerweise nicht so häufig. Aber die Modelview Matrix ändert sich normalerweise ständig. Um ein wenig Leistung einzuparen sollte es genügen, wenn du zu diesem Zeitpunkt die ModelView (wie aus dem Wiki) sicherst. Die Tiefe, Projektion und den Viewport kannst du bei Bedarf auslesen. Ist sicherlich auch nicht optimal aber für den Anfang sollte es ausreichen.
Zum Optimieren könnte man es später sich machen, dass du beim Mausklick ein Flag (Boolean) setzt und diesen dann unten auswertest. Das Auslesen oder Setzen einer Matrix gehört leider mit zu den Operationen die man sparsam einsetzen sollte. Das aber nur mal am Rande.
Ach ja. Was du evtl auch beachten solltest. Diese Technick interessiert es nicht von was es die Koordinaten ausrechent. Solltest du also etwas vor oder auf deiner Heightmap haben so wird sie auch stumpf die Koordinaten davon ausrechnen. Und dann wirst du wieder nur dummes Zeug zurück bekommen.
PS: Wenn bedarf daran besteht kannst du natürlich immer Quellcodestückchen posten. Solltest du dein ganzes Projekt posten wollen dann immer mit allen benötigten Dateien und nur als zip.
Wenn ich den Code ausführe, bekomm ich allerdings (fast genau) die Position der Kamera und nicht der Stelle die ich anklicke, egal wie weit weg die ist.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Evtl wäre es dann besser, wenn du uns mal das ganze Projekt zur Verfügung stellst. Vorrausgesetzt das ist machbar und nicht ganz zu große. Falls es zu groß sein sollte kannst du es mir auch per mail schicken dann schaue ich mal oder lade es hoch.
Aber ich hatte das in meinem Projekt mal direkt so ausprobiert und dort hatte es auch genau so funktioniert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
So habe dein Projekt hochgeladen (1.3 MB) und schon mal kurz angesehen. Die eine Texture war keine Potenz von 2. Habe ich mal geändert.
Und ja irgendwie bekommt man fast die Position des Spielers raus. Er ignoriert irgendwie die Mausposition worauf ich mir so jetzt keinen Reim draus machen kann. Ich werde mir das aber später noch mal anschauen. Aber vielleicht sieht der ein oder andere mehr.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.