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

Aktuelle Zeit: Fr Jul 18, 2025 08:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Maussteuerung
BeitragVerfasst: Mi Aug 20, 2003 09:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 09:15
Beiträge: 70
Wohnort: Italien
Ich habe folgendes Problem:
Ich möchte in meinem Prog Maussteuerung einbauen bzw. muss es.
Dazu kann ich die Mauskoordinaten am Bildschirm herausfinden, aber das nützt mir nicht viel, da ich 3D verwende...
Nun, kann man mit OpenGl herausfinden, auf welchen Pixel (x,y), eine Koordinate(x,y,z) gerendert wird, damit man das mit der Maus vergleichen kann?

Wenn nein, wie kann man sonst herausfinden, wo die Maus hinzeigt?
Und kann ich (und wie) herausfinden, ob die Maustaste gedrückt wird, oder nicht?

Ich benutze zur Zeit nicht VCL für meine Programme, wäre das besser / schlechter / einfacher / komplizierter?

P.S.: Wo gibt es eine gute (deutsche) dokumentation über (alle) OpenGL Funktionen?

_________________
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 20, 2003 10:18 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Also maussteuerung unter nonVCL fängst du mit Messages ab:

WM_MOUSEMOVE um die Position in X,Y (lParam, wParam) zu kriegen.

WM_LBUTTONDOWN für Linke maustaste gedrückt
WM_MBUTTONDOWN für mittlere maustaste gedrückt
WM_RBUTTONDOWN für rechte maustaste gedrückt

und das gleiche geht natürlich auch für taste loslassen, also einfach anstatt DOWN... UP schreiben ;D

So um die mausposition in ne 3D Koord zu wandeln nimmt man einfach den befehl gluUnProject, im Faq auf DGL wird die procedure ausreichend erklärt.

hoffe ma geholfen zu haben,
mata,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Maussteuerung
BeitragVerfasst: Mi Aug 20, 2003 10:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
tyr hat geschrieben:
Nun, kann man mit OpenGl herausfinden, auf welchen Pixel (x,y), eine Koordinate(x,y,z) gerendert wird, damit man das mit der Maus vergleichen kann?

Ja, das kann man.Dazu gibt es die Funktion gluUnProject.Dazu musst du aber vorher noch via glReadPixels den Z-Wert an der Mausposition auslesen (Format = GL_DEPTH) und diesen Wert dann auch an gluUnProject übergeben.

tyr hat geschrieben:
Und kann ich (und wie) herausfinden, ob die Maustaste gedrückt wird, oder nicht?

Ja, kann man.Da du in deinem nächsten Satz sagst das du die API nutzt, musst du in deiner Ereignisschleife auf die Nachricht WM_MBUTTONDOWN reagieren (nähere Infos dazu gibts in der mit Delphi kommenden WindowsSDK-Hilfe).

tyr hat geschrieben:
Ich benutze zur Zeit nicht VCL für meine Programme, wäre das besser / schlechter / einfacher / komplizierter?

VCL ist besonders im Bezug auf das Abfangen von Nachrichten und das Erstellen von Komponenten wie z.B. Timern sehr einfacher, da die VCL ja zur RAD erdacht wurde (Rapid Application Developement).Anstatt also z.B. alle Ereignisse eines Buttons abfangen zu müssen, geht das mittels VCL ganz einfach über die Delphi-IDE.VCL ist also sehr viel einfacher (im Bezug auf Komponenten) als pure API, und besonders fürs Prototyping sehr zu empfehlen.

tyr hat geschrieben:
P.S.: Wo gibt es eine gute (deutsche) dokumentation über (alle) OpenGL Funktionen?

Eine deutsche Doku ist mir leider nicht bekannt, aber auf den glManPages von 3DLabs findest du die Funktionsbeschreibungen aller OpenGL-Befehle auf englisch (allerdings exklusive wgl und glu).

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 20, 2003 10:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 09:15
Beiträge: 70
Wohnort: Italien
Danke an beide: Ich denke, ich kann damit sehr gut weiterarbeiten.
Nochmals thx

_________________
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Einfachere möglichkeit...
BeitragVerfasst: Fr Aug 22, 2003 10:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 09:15
Beiträge: 70
Wohnort: Italien
Ich bin jetzt gerade (durch Zufall) auf folgende möglichkeit geschtoßen, um sehr einfach eine Steuerung einzubauen:

Per
Code:
  1. glInitNames;
  2. glPushName(0);
  3. glLoadName(x);
  4. (* code des Objektes *)
  5.  


...kann das sehr einfach gemacht werden.
Zum auslesen habe ich auch schon eine Prozedur.


Dass ich hier nur eine begrenzte Anzahl von Objekten habe(ca. 128), interressiert mich zur Zeit nicht(ich brauche nur max. 24)

Gibt es sons noch einen Haken an der Methode, oder habt ihr das noch nie probiert(glaub ich nicht)?

_________________
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 22, 2003 10:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das was du da machst nennt sich Selection(Buffer), und das hat eigentlich fast jeder von uns schonmal gemacht (ich hab dazu sogar ein ganzes Tutorial auf meiner HP verfasst).Allerdings nutzt man Selektion nicht zur Maussteuerung, sondern eher zum Auswählen von Objekten mittels der Maus, es sei denn du verstehst unter Maussteuerung was anderes als der Rest von uns.

Und die Sache mit der "begrenzten" Anzahl an Objekten ist auch nicht korrekt.Diese Zahl gibt nämlich nur an, wie viele Objekte gleichzeitig getroffen werden können, und da sind 128 recht viel (d.h. im Endeffekt das 128 Objekte direkt hintereinander liegen können und dann bei der Seletkion im Selektionsbuffer abgelegt werden).Die Anzahl der Objekte die du auf den Namestack legen kannst ist allerdings (fast) unbegrenzt.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 22, 2003 12:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 09:15
Beiträge: 70
Wohnort: Italien
Im Prinzip ist das eigentlich das, was ich gebraucht habe, ich wusste nur nicht, dass es auch so einfach geht. Ich wollte nämlich die Mauspos. in 3D umrechnen, und dann mit meinen Vertexen vergleichen...

und natürlich meine ich mit Maussteuerung, das Steuern des Programms mit der Maus und in meinem Fall müssen bestimmte Objekte anlickbar sein. Und wenn man "beliebig" viele dieser Selection-buffer anlegen kann, dann passt mir das um so besser....

P.S. Ich kann mir beim besten Willen nicht vorstellen, was man noch unter Maussteuerung verstehen könnte...

_________________
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 22, 2003 12:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
tyr hat geschrieben:
P.S. Ich kann mir beim besten Willen nicht vorstellen, was man noch unter Maussteuerung verstehen könnte...


Unter Maussteuerung versteht man (so zumindest ich) eher sowas wie die Maussteuerung bei einem Ego-Shooter, wo man mit der Maus seinen Blickwinkel verändern kann.
Das was du jetzt mit dem Selektionsbuffer machst nennt sich dann auch eher Mausauswahl, da du ja mit deiner Maus Objekte auswählen willst (in deinem Fall Vertex).

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


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: Google [Bot] und 7 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 | 17 Queries | GZIP : On ]