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

Aktuelle Zeit: Sa Jul 05, 2025 08:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mauskoordinaten -> OpenGL
BeitragVerfasst: Do Jan 02, 2003 23:25 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

also ich möchte gern ein Objekt (einen Pfeil :) ) mit der Maus auf der X-Achse entlang ziehen...

Also, der Pfeil soll immer da sein wo die Maus gerade ist, wie mach ich das? :)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 01:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ööh... die Position des Mauszeigers im OnMoveEvent bearbeiten?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 01:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Das ist dann aber nicht die Position in der Szene... :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 05:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Schau dir mal die Funktion gluUnProject() genauer an.Die wandelt die Fensterkoordinaten in Objektkoordinaten um, und sollte genau das machen was du benötigst.

Mehr Infos zur Parameterübergabe an diese Funktion :
<a href='http://www.eecs.tulane.edu/www/graphics/doc/OpenGL-Man-Pages/gluUnProject.html' target='_blank'>http://www.eecs.tulane.edu/www/graphics/do...uUnProject.html</a>

und hier :
<a href='http://www.opengl.org/developers/faqs/technical/glu.htm' target='_blank'>http://www.opengl.org/developers/faqs/tech...chnical/glu.htm</a> (Kapitel 4.070, ganz am Seitenende)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 03, 2003 18:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

Danke, scheint zwar das zu sein was ich suche, klappt aber bei mir nich so ganz :(

Ich hab das jetzt so gemacht:
Code:
  1. var
  2.  
  3.  &nbsp;MouseX, MouseY: Integer;
  4.  
  5.  &nbsp;ModelView, Projection: Array[0..15] of GLFloat;
  6.  
  7.  &nbsp;Viewport: Array[0..3] of GLUInt;
  8.  
  9.  &nbsp;ObjX, ObjY, ObjZ: GLDouble;
  10.  
  11.  &nbsp;Depth: GLFloat;

Code:
  1. WM_MOUSEMOVE: begin
  2.  
  3.  &nbsp;MouseX:=LoWord(lParam);
  4.  
  5.  &nbsp;MouseY:=HiWord(lParam);
  6.  
  7.  &nbsp;glGetFloatv(GL_MODELVIEW_MATRIX,@ModelView);
  8.  
  9.  &nbsp;glGetFloatv(GL_PROJECTION_MATRIX,@Projection);
  10.  
  11.  &nbsp;glGetIntegerv(GL_VIEWPORT,@Viewport);
  12.  
  13.  &nbsp;glReadpixels(MouseX,Viewport[3] - MouseY,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,@Depth);
  14.  
  15.  &nbsp;gluUnProject(MouseX,Viewport[3] - MouseY,Depth,@ModelView,@Projection,@Viewport,ObjX,ObjY,ObjZ);
  16.  
  17. end;


Hab ich da jetzt was falsch gemacht?? (ObjX, ObjY, ObjZ ist immer 0)

*winkt*
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 05, 2003 01:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

also ich hab das nun in mehreren formen versucht... aber irgendwie klappt es bei mir nicht :cry:

Hat sowas nochnie jemand mal gemacht?? *schaut unsicher*

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 05, 2003 12:15 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Hmm ... rein rechnerisch gesehen ist für mich die Sache zumindest klar:
Die Kamera steht auf dem Ursprung. In der perspectivischen Ansicht kennt man den Sichtwinkel (meistens 45°). Wenn man nun weiß, wie weit das Objekt von dem Ursprung entfernt sein müsste, so müsste man mit diesen Infos errechnen können, "wie breit" an der Stelle der Bildschirm in Weltkoordinaten ist. Weiß man dieses, so müsste man auch die "breite" eines Pixels ausrechnen können und damit die Mauskoordinaten ausrechnen können (am besten eine quatratische Zeichenfläche nehmen).....
So zumindest würde ich das machen, ob es funzt ist eine andere Geschichte.......

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 10, 2003 15:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Du suchst wahrscheinlich folgenden Code:

Code:
  1.  
  2.  
  3. procedure PositionObj2d(x,y : integer; Obj: tObj);
  4.  
  5. var modelmatrix, projmatrix : TMatrix4d;
  6.  
  7.  &nbsp; &nbsp;viewport : TVector4i;
  8.  
  9.  &nbsp; &nbsp;ox, oy, oz, z : TGLdouble;
  10.  
  11. begin
  12.  
  13.  &nbsp;glLoadMatrixf(Addr(ViewMatrix));
  14.  
  15.  &nbsp;Obj.SetOwnerMatrix;
  16.  
  17.  &nbsp;// Die oberen beiden Kommandos setzen setzen nur das lokale
  18.  
  19.  &nbsp;// Koordinatensystem von Obj auf. Wenn du keine
  20.  
  21.  &nbsp;// hierarchischen Objekte verwendest, setzt du die ModelViewMatrix mit der
  22.  
  23.  &nbsp;// Identitätsmatrix oder der Viewmatrix deines Koordinatensystems auf
  24.  
  25.  
  26.  
  27.  &nbsp;glGetDoubleV(GL_MODELVIEW_MATRIX, Addr(modelmatrix));
  28.  
  29.  &nbsp;glGetDoubleV(GL_PROJECTION_MATRIX, Addr(projmatrix));
  30.  
  31.  &nbsp;glGetIntegerV(GL_VIEWPORT, Addr(viewport));
  32.  
  33.  &nbsp;// Objektkoordinaten in Fensterkoordinaten umwandeln, wir brauchen ja
  34.  
  35.  &nbsp;// die Distanz des Objektes vom "Bildschirm"
  36.  
  37.  &nbsp;gluProject(Obj.x,Obj.y,Obj.z, modelmatrix, projmatrix, viewport, @ox, @oy, @oz);
  38.  
  39.  &nbsp;z := oz;
  40.  
  41.  &nbsp;// Weltkoordinaten anhand der 2D-Koordinaten (GL Ursprung links unten)
  42.  
  43.  &nbsp;// berechnen. Die Variable GL ist nur ein Rechteck, das die Fensterkoordinaten
  44.  
  45.  &nbsp;// des OpenGL Fensters enthält. Fensterkoordinaten haben den Ursprung
  46.  
  47.  &nbsp;// links oben, während OpenGL den Ursprung links unten erwartet, daher die
  48.  
  49.  &nbsp;// Subtraktion
  50.  
  51.  &nbsp;gluUnProject(x,GL.bottom-y,z, modelmatrix, projmatrix, viewport, @ox, @oy, @oz);
  52.  
  53.  &nbsp;// ox,oy und oz enthalten die Weltposition die der Bildschirmposition an
  54.  
  55.  &nbsp;// der Z-Koordinate des Objektes entspricht
  56.  
  57.  &nbsp;Obj.setpos(ox,oy,oz);
  58.  
  59. end;
  60.  
  61.  


Ich hoffe das hilft dir weiter,

viel Spaß beim Programmieren,

Martin

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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 ]