Oki also ich habe eine recht komplexe Frage(zu der ich einfach keinen Titel finde) und bitte ersteinmal den recht nichtssagenden Titel zu entschuldigen.
Also es geht darum, dass ich herausfinden möchte, an welcher Stelle (also bei welchen 3D-Koordinaten) der Mauszeiger auf ein
Objekt trifft...
Um die Situation genauer darzustellen: Ich habe eine Landschaft, und möchte nun mit dem Cursor eine Textur an der Cursorposition drüberlegen
(Vergleichbar mit der Auswahl von C&C für Gebietsschadentechniken).
Außerdem brauche ich die Position (also X und Y) für weitere Berechnungen...
Vielen Dank für die Hilfe in Vorraus
Euer
The Fettel-Error
_________________ *sudo*
may the force
be with
you!
mit gluunproject (ich glaub so hieß der befehl) kannst du die 2d koordinaten der maus in 3d koordinaten umrechnen, den z wert musst du afaik aus dem z-buffer auslesen (guckt dir mal den selection source an, da wird der z buffer afaik verwendet)
joa hmkay also ich habe mir den Kauderwelsch mal angesehen und irgendwann einfach nach dem [STRG]+[C] & [STRG]+[V] gegriffen...
und habe, wie es nicht anders zu erwarten war erstmal einen Fehler bekommen, der mich darauf hinweist, dass keine overload-version von
glReadpixels besteht, die mit den entsprechend verwendeten Parametern aufgerufen werden könnte. Also ich habe jetzt nochmal gute 2 Stunden damit verbracht nen Fehler zu finden aber ich sehe nix...
das is der Code(aus dem DGLWiki-Beispiel) der den Fehler verursacht (die Datentypen poste ich mal mit):
Code:
var
...
Z : TGLdouble;
...
begin
...
glReadPixels(X, Y_new, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Z ); // <--- hier taucht der Fehler auf
...
end;
Zitat:
There is no overload version of 'glReadPixels' that can be called with these arguments
Achso: Vielen Dank für die schnellen Antworten... großes Lob die page ist super
The Fettel-Error
_________________ *sudo*
may the force
be with
you!
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Ebenfalls eine leichte Möglichkeit vor allem bei komplexen Gebilden oder unterschiedlichen Klickbereichen ist es die Szene bei einem Klick noch einmal mit allen relevanten Objekten ohne Texturen, Licht und sonstigen Kram zu zeichnen. Reine Geometrie, wobei jeder Klickbereich (Objekt) in einer einmaligen Farbe gezeichnet wird. Dann brauchst nur noch den Farbwert an der aktuellen Mausposition abfragen und in einer Liste das Objekt an Hand der Farbe identifizieren.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Ja ich will ja net wissen welches Objekt angeklickt wird, sondern wo es angeklickt wurde:
Code:
//Dreiecke
glVertex3f (-10,-5,10);
glVertex3f (10,-5,10);
glVertex3f (5,5,10);
Jetzt klicke ich in die Mitte meines Bildschirms un möchte jetzt als Rückgabe haben:
"Der Mausklick trifft Objekt 'Dreieck' an der Stelle (0,0,10)"
Ich möchte halt meine Textur am Cursor über die Textur der eigentlichen Struktur legen.
Sinn und Zweck des ganzen: Ich möchte einen Geländeeditor basteln, und mithilfe der Maus dabei das Gelände absenken oder erhöhen. dafür muss ich aber wissen, wo drauf die Maus deutet (vor allem brauche ich die exakte Position also nicht nur Objekt) um einmal dort eine Pinsel-Graphik einsetzen und dann auch tatsächlich das Gelände verändern zu können.
Vielleicht hat jemand von euch ja ne ganz andere Idee wie man so etwas realisieren könnte... trotzdem würde mich interessieren wie ich diesen Fehler bezüglich der overload-version von glReadpixels wieder loswerde^^
The Fettel Error
_________________ *sudo*
may the force
be with
you!
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Lossy eX hat geschrieben:
Warum Selction?
Ähm. Du hast diese Frage aber schon gesehen, oder? Er brauch ja nicht bei der Selection schauen weil in dem Artikel von gluUnProject ist alles dabei was man braucht.
@LarsMiddendorf: Vielen dank ... das hat mir sehr geholfen...
Jetzt habe ich natürlich ein Probelm:
Wenn ich meine Landschaft verändere (also einzelne Höhenpunkte)
und dann auch noch die "Welt" rotieren lasse (glrotatef), kann ich ja garnet mehr von
den Weltkoordinaten auf die Texturkoordinate schließen?
Also ich hab da ein Raster mitten im Raum liegen (zB 10x10 Kontrollpunkte mit einem Abstand von 1).
Ich führe noch einen Rotatebefehl aus, der das ganze in so einer leichten 120°-Winkel bringt (zwischen Kameravector und dem Raster).
Wie bekomme ich also heraus wo auf dem raster ich mich befinde? Ich brauche ne neue kreative Idee^^
Über eine manuelle umrechnung habe ich mir schon gedanken gemacht, das bringt nur leider sehr wenig, da ich ja die Geländehöhe
editieren will, und dann das Problem habe, dass ja einige Kontrollpunkte höher liegen und somit anders gedreht werden (und ich daher mit Sin&Co net mehr weiterkomme) ... vllt hat ja jemand mit sowas erfahrung ... ein paar Vorschläge wären nice.
Ansonsten erstma danke für die Hilfe und
@Lossy&Seth: ich fand bisher alle posts verständlich... also keinen Streit vermeiden^^
Euer The Fettel-Error
_________________ *sudo*
may the force
be with
you!
Mitglieder in diesem Forum: 0 Mitglieder und 9 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.