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

Aktuelle Zeit: Di Jul 15, 2025 02:06

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem UnProject mit "Modelview"
BeitragVerfasst: So Jan 22, 2012 18:33 
Offline
DGL Member

Registriert: Mo Jul 25, 2011 18:15
Beiträge: 25
Wohnort: Nürnberg
Programmiersprache: C#
Hallo Leute,

hab mal wieder ein Problem, zu welchem ich leider nirgends Hinweise finde.

Ich möchte mit Glu UnProject die Mausposition in Welkoordinaten(OpenGl Koordinaten) umwandeln.
Dies funktioniert leider nur solange, wie ich im Matrixmode "GL_PROCETVIEW" arbeite!
Ich hab dies in ner 2D Darstellung versucht und bekomme richtige Ergebnisse
(In 2D kann ich ja problemlos in die Projektionsmatrix schreiben!)

-> Sobald ich jedoch in der Draw Methode "Gl.glMatrixMode(Gl.GL_MODELVIEW);" stehen habe,
liefert UnProject völlig falsche Koordinaten.

-> Beim Debuggen erkenne ich nicht, dass die Modelmatrix falsch ausgelesen wird.


Für Hinweise bin ich sehr Dankbar! Im Anhang die betrefenden Code-Zeilen!
Als OpenGl Bin verwende ich die TAO Version 1.5

Gruß
Christian

Die UnProject Methode:
Code:
  1. static public double[] UnProject(double winx, double winy, double winz)
  2.         {
  3.             double[] modelview = new double[16];
  4.             double[] projection = new double[16];
  5.             int[] viewport = new int[4];
  6.             Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX, modelview);
  7.             Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX, projection);
  8.             Gl.glGetIntegerv(Gl.GL_VIEWPORT, viewport);
  9.  
  10.             double x = 1;
  11.             double y = 1;
  12.             double z = 1;
  13.  
  14.             Glu.gluUnProject(winx, winy, winz, modelview, projection, viewport, out x, out y, out z);
  15.  
  16.             return new double[] { x, y, z};
  17.         }


Die Methode Mouse Move
Code:
  1. private void OpenGLCtrl_MouseMove(object sender, MouseEventArgs e)
  2.         {
  3.             if (e.Button == MouseButtons.Left && floorBuilder != null)
  4.             {
  5.                 [color=#00BF00]//1. Mausposition in Weltkoordinaten erfassen[/color]
  6.                 double[] mp = VectorOperation.UnProject(e.X, this.OpenGLCtrl.Height - e.Y, 0);
  7.                 floorBuilder.SetLoaction(new Vertex((float)mp[0], 0, 0));
  8.  
  9.                 toolInfo_Pos.Text = mp[0].ToString() + " / " + mp[1].ToString() + " / " + mp[2].ToString();
  10.                 this.OpenGLCtrl.Invalidate();
  11.             }
  12.         }



Begin der Draw Methode
Code:
  1. public void DrawScene()
  2. {
  3.             Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT | Gl.GL_STENCIL_BUFFER_BIT);
  4.             Gl.glMatrixMode(Gl.GL_MODELVIEW);
  5.             Gl.glLoadIdentity();
  6.             Gl.glPointSize(5);
  7.  
  8.             //Scene Translation & Rotation
  9.             Gl.glRotatef(sceneRot.X, 1, 0, 0);
  10.             Gl.glRotatef(sceneRot.Y, 0, 1, 0);
  11.             Gl.glRotatef(sceneRot.Z, 0, 0, 1);
  12.             Gl.glTranslatef(sceneTrans.X, sceneTrans.Y, sceneTrans.Z);
  13.  
  14.             Gl.glScalef(glScale, glScale, glScale);
  15.  
  16.             .....
  17. }


Zuletzt geändert von Lord Horazont am So Jan 22, 2012 18:49, insgesamt 1-mal geändert.
Codetags hinzugefügt


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jan 22, 2012 18:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Willkommen im Forum!
Bitte nutze das nächste mal die [code]-Tags um deinen Quelltext hervorzuheben. Das macht es leichter, deine Frage zu beantworten.

Grüße
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jan 22, 2012 19:14 
Offline
DGL Member

Registriert: Mo Jul 25, 2011 18:15
Beiträge: 25
Wohnort: Nürnberg
Programmiersprache: C#
Danke Horazont... werds in Zukunft beachten :oops:

Hab eben nochmal einige Koordinaten ausgelesen...

es muss irgend ein Multiplikator falsch sein bzw. nicht beachtet!

z.B. Gehe ich von x=-10 nach x=+10 und erhalte Werte ~-0.008 ..... +0.008


Wenn ich mich nit irre, ist die UnProject Abfrage mit z=0 falsch, da dies der Nah-Punkt ist und ich ja einen Punkt in negativer Z-Richtung
abfrage...
Ergo müsste ich den vordersten Punkt (z=0) & den hintersten (z=1) abfragen und dann irgendwie gegenrechnen :roll:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jan 22, 2012 21:15 
Offline
DGL Member

Registriert: Mo Jul 25, 2011 18:15
Beiträge: 25
Wohnort: Nürnberg
Programmiersprache: C#
Jepp mir geht ein Licht auf :shock:

-> kann ja mit UnProject nur das "Viewingvolumen" an der Near- und Far-Plane abtasten!

Bsp: Init:

Code:
  1. Glu.gluPerspective(60.0f, (double)glWidth / (double)glHeight, 1f, 50.0f);


Ergo wenn ich den AP auf Z=1 setze, kann ich x/y bei z=0 und Z=50 berechnen und dann über Trigonometrie/Strahlensatz
auf den gewünschten Z-Wert zurückrechen :lol:

Gibts da irgendwelche Tricks??? wenn dann noch Rotation hinzukommt gibt das ja ne Kreuz- und Querrechnung hin :cry:


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


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]