So, Poste ich auch nochmal.
Ich habe es jetzt mit der Funktion von sulaco versucht.
Code:
function GetOpenGLPos(X, Y:Integer): TVector3d;
var
viewport: OpenGl12.TVector4i;
modelview: OpenGl12.TMatrix4d;
projection: OpenGl12.TMatrix4d;
winZ,winY:Single;
begin
glGetDoublev(GL_MODELVIEW_MATRIX,@modelview );// Get the Current Modelview matrix
glGetDoublev(GL_PROJECTION_MATRIX,@projection );// Get the Current Projection Matrix
glGetIntegerv(GL_VIEWPORT,@viewport );// Get the Current Viewport
winY := viewport[3]- y;//Change from Win32 to OpenGL coordinate system
glReadPixels(X,Round(winY),1,1, GL_DEPTH_COMPONENT, GL_FLOAT,@winZ );//Read the Depth value at the current X and Y position
gluUnProject(X, winY, winZ,
modelview, projection, viewport,// Get the vector for the current mouse position
@Result[0],@Result[1],@Result[2]);// And Return it from the function
end;
Nun kann ich ja meine Fläche Scrollen. Deshalb muss ich ja auch den zu scrollenden Wert wieder zu den Werten die mir gluunproject zurückgibt mit berechnen. Denn er gibt mir ja immer den Wert von der Momentanen Sicht an.
Code:
procedure TSpieler.MausDown(x,y:integer);
var
Punkt3D: TVector3d;
begin
Punkt3D := template_main.GetOpenGLPos(X, Y);
Clicked_x := Punkt3D[0]-mappos.x;
Clicked_z := Punkt3D[2]-mappos.z;
end;
Das mach ich also hier auch.
Mit X Funktioniert das ganze super. Aber mit z, ne.
Und ich kann auch net sagen, warum das net stimmt. ich weiß nur das er meine Fläche nicht dahin setzt, wo er sie hinzusetzen hat.
Vllt. verstehts ja einer von euch.
Kann es evtl daran liegen, das meine Fläche im Winkel von 60° Angezeigt wird?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Deine Flächen werden doch beim Rendern gescrollt, oder? Und das wird ja über die Modelansichtsmatrix von gluUnproject bereits miteinbezogen, also dürfte es daran nicht liegen, und du musst die Scrollposition auch nicht von den mit gluUnproject ermittelten Werten abziehen.
Ausserdem (ich hab mindestens schon ein dutzend mal was in der Richtung zu gluUnproject gesagt) müssen WinX, WinY und WinZ vom Typ DOUBLE sein...
Och verdammt, ich warte seit einigen Tagen auf ne Antwort, aber irgendwie kam meine letzte Nachricht net an :-/
ALSO:
Ja, SOS, das mit dem Double hab ich schon gelesen gehabt, dass du das geschrieben hattest.
Hatte es auch so ausprobiert, ändert nichts.
Die X-Koordinaten, hatten erst gestimmt, nachdem ich den gescrollten wert mit einberechnet hatte.
Also, ohne dies geht es nicht.
Auch die Z-Koordinate, funktioniert so nicht, aber die funktionierte ja so und so nicht.
Ich vermute wirklich das es doch irgendwo am Winkel liegt, denn so mehr ich zu 90° komme, so weniger ändert sich der Z-Wert bei mausänderungen (Was ja verständlich ist) aber ich möchte den Z-Wert von dem wie ich es momentan sehe.
War jetzt vllt. bissl unverständlich :-/
Aber wenn das Quadrat fast senkrecht steht, ändert sich der Z-Wert kaum, das will ich aber nicht.
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.