Registriert: Mi Jan 08, 2003 15:49 Beiträge: 266 Wohnort: Aachen
die sourcen habe ich geändert, jetzt bekomme ich auch für z eine richtigen wert, jetzt bin ich schon einen kleinen schritt weiter. Aber x,y und z sind nach meiner meinung nicht richtig!
Ich hab' in einem anderen OpenGL-Forum (bekenne mich schuldig. Bin fremdgegangen ) folgenden Code gefunden (original war in C. Hab' ihn einfach angepasst). Den könntest DU mal probieren:
Code:
procedure WinKoorToObjectKoor(x, y: integer; var Ox, Oy,Oz: Double);var
a,b : array [0..15] of GLDouble;
c : array [0..3] of GLint;
x1, y1, z1 : GLFloat;
begin
glGetIntegerv(GL_VIEWPORT, @c[0]);
y := viewport[2] - y;
y1 := y;
x1 := x;
glGetDoublev(GL_MODELVIEW_MATRIX, @a[0]);
glGetDoublev(GL_PROJECTION_MATRIX, @b[0]);
glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @z1);
gluUnProject(x1,y1,z1, @a[0], @b[0], @c[0], ox, oy, oz);
end;
Keine Ahnung ob das Funktioniert und sicherlich kann man das Variablentechnisch optimieren. Hey, ich hab's nicht geschreiben sondern nur konvertiert und nicht getestet! Aber der, welcher es veröffentlicht hat, meinte, der Code würde auf das Bsp. 3-8 des OpenGL-RedBooks basieren. Notfalls da mal 'reinschaun.
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Registriert: Mi Jan 08, 2003 15:49 Beiträge: 266 Wohnort: Aachen
Zitat:
Ich hab' in einem anderen OpenGL-Forum (bekenne mich schuldig. Bin fremdgegangen ) folgenden Code gefunden (original war in C. Hab' ihn einfach angepasst). Den könntest DU mal probieren:
Code:
procedure WinKoorToObjectKoor(x, y: integer; var Ox, Oy,Oz: Double);var
a,b : array [0..15] of GLDouble;
c : array [0..3] of GLint;
x1, y1, z1 : GLFloat;
begin
glGetIntegerv(GL_VIEWPORT, @c[0]);
y := viewport[2] - y;
y1 := y;
x1 := x;
glGetDoublev(GL_MODELVIEW_MATRIX, @a[0]);
glGetDoublev(GL_PROJECTION_MATRIX, @b[0]);
glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @z1);
gluUnProject(x1,y1,z1, @a[0], @b[0], @c[0], ox, oy, oz);
end;
Keine Ahnung ob das Funktioniert und sicherlich kann man das Variablentechnisch optimieren. Hey, ich hab's nicht geschreiben sondern nur konvertiert und nicht getestet! Aber der, welcher es veröffentlicht hat, meinte, der Code würde auf das Bsp. 3-8 des OpenGL-RedBooks basieren. Notfalls da mal 'reinschaun.
cool, danke erst mal das du dir die Mühe gemacht hast. Habe es mal ausprobiert und als Ergebnis habe ich volgendes bekommen :
<a href='http://hometown.aol.de/DelphiPic/Rundung.JPG' target='_blank'>http://hometown.aol.de/DelphiPic/Rundung.JPG</a>. Also noch nicht ganz richtig und im Reedbook habe ich auch nichts gefunden.
Dan probier statt den glFloats nochmal die Double-Varianten. Y und Z scheinen ja ganz sinnvolle Werte zu haben, aber der X Wert sieht mir nach 'nem Überlauf aus...
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Registriert: Mi Jan 08, 2003 15:49 Beiträge: 266 Wohnort: Aachen
Text von einer Internetseite :
Die Funktion liefert die zu den zweidimensionalen Fensterkoordinaten dazugehörigen Weltkoordinaten. Die benötigte ModelView- und Projektions-Matrix und die aktuellen Einstellungen des Viewport werden als Argumente übergeben
habe gerade was auf einer Seite gefunden. Kann es sein das wenn ich nicht im 2D Modus bin das dann so was raus kommen kann?
na ja... ich nehme mal an das gluUnProject schreibt in deine Varibale a und b (ModelView und Projetion Matrix) die neue - veränderte - Matrix.
Deswegen versuch mal mit glMultMatrix, bzw glLoadMatrix die neue Matrix zu laden... (wie genau.. müßt ich Delphi starten, aber keine Zeit mehr, muß gleich weg )
Registriert: Mi Jan 08, 2003 15:49 Beiträge: 266 Wohnort: Aachen
Zitat:
Hi, ...Deswegen versuch mal mit glMultMatrix, bzw glLoadMatrix die neue Matrix zu laden...
Das geht nicht mit glMultMatrix, bzw glLoadMatrix. Habe in der Hilfe nach geschaut und habe gesehen das glMultMatrix, bzw glLoadMatrix einen Parameter GLDouble[4] braucht aber die variablen sind GLDouble[15].
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.