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

Aktuelle Zeit: Mi Jul 16, 2025 15:36

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Jun 12, 2012 19:15 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hallo,

Zu den Menus hab ich mir gedacht, dass ich Quads erstelle und Text reinschreib.

Jetzt brauch ich eine Funktion, die mir sagt, ob der Mauscursor an der selben stelle ist, wie das jeweilige Polygon.

Gibt es da schon eine fertige Funktion, die das kann? Also eine Funktion, die mir sagt ob der und der Pixel einem Polygon zugeordnet werden kann oder umgekehrt?

schönen Gruß

Vinz

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jun 12, 2012 19:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Views (Menueitems) sind in den meisten Fällen nur Quads (dies Gilt natürlich nicht für den Inhalt) von daher musst du einfach nur überprüfen ob
dein Punkt innerhalb deines Vierecks liegt (sollte kein Problem werden denke ich). Entscheidend ist das du sie aber in einer Hierachischen Struktur
anordnest. Dein Hittest sähe dann z.B. so aus:
Code:
  1.  
  2. View getViewForPosition(int x,int y)
  3. {
  4.     if(isInBounds(x,y)) //ist im Quad, bei Polygonen einfach die orthogonalen Richtungsvektoren nehmen und multiplizieren...
  5.     {
  6.         View output = this;
  7.         foreach(View child in children)
  8.         {
  9.             View test  = child.getViewForPosition(x,y);
  10.             if(test != null)
  11.             {
  12.                  output = test;
  13.             }      
  14.         }
  15.         return output;
  16.     }
  17.     return null;
  18. }
  19.  

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 13, 2012 10:16 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hallo und Danke für die Antwort.
Mich hätte noch interessiert, ob es eine Funktion gibt, die mir sagt, welches Quad/Polygon sich hinter einem bestimmten Pixel befindet oder umgekehrt.
Denn wenn ich es manuell überprüfe, hängt es ja von der Auflösung ab, oder?
Aber eigentlich kann man dann auch die Breite/Höhe der Auflösung mit rein multiplizieren, oder?
Ich hab mir halt gedacht, dass, da ja jedes Polygon auf gewissen Pixeln landet, OpenGL ja wissen müsste, was wo landet,
aber kann man darauf zugreifen?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 13, 2012 10:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Dann würde ich empfehlen, dir mal den Orthomodus anzuschauen. Das eignet sich für das Zeichnen von GUIs immer noch am besten :)

grüße

_________________
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: Mi Jun 13, 2012 13:27 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Oh, das kannte ich wirklich noch nicht, macht die Sache wesentlich einfacher, danke.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 13, 2012 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ich hab mir halt gedacht, dass, da ja jedes Polygon auf gewissen Pixeln landet, OpenGL ja wissen müsste, was wo landet,
aber kann man darauf zugreifen?

Du kannst auf den Pixel unter dem Cursor zugreifen. Die Frage ist was dir das bringt...letztlich ist das nur eine Farbe. Du kannst natürlich einen extra Render-Pass machen und Objekt-IDs in die Farbe kodieren. Dann liest du den gewünschten Pixel aus und schließt aus der Farbe auf die Objekt-ID die dich dann zum Objekt führt. Stichwort dazu wäre "Color-Picking". OpenGL hat auch einen "Selektions-Modus", der ist aber veraltet (sollte nicht mehr benutzt werden) und macht letztlich nichts anderes.

Color-Picking lohnt nur bei vielen Polygonen und komplexer Geometrie. Bei einer einfachen GUI mit nur ein paar Buttons und Fenstern ist es definitiv sinnvoller einfach die Cursor-Koordinaten direkt gegen die Quads zu testen, also ohne Umweg über OpenGL.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 13, 2012 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Coolcat hat geschrieben:
Zitat:
Ich hab mir halt gedacht, dass, da ja jedes Polygon auf gewissen Pixeln landet, OpenGL ja wissen müsste, was wo landet,
aber kann man darauf zugreifen?

Du kannst auf den Pixel unter dem Cursor zugreifen. Die Frage ist was dir das bringt...letztlich ist das nur eine Farbe. Du kannst natürlich einen extra Render-Pass machen und Objekt-IDs in die Farbe kodieren. Dann liest du den gewünschten Pixel aus und schließt aus der Farbe auf die Objekt-ID die dich dann zum Objekt führt. Stichwort dazu wäre "Color-Picking". OpenGL hat auch einen "Selektions-Modus", der ist aber veraltet (sollte nicht mehr benutzt werden) und macht letztlich nichts anderes.

Color-Picking lohnt nur bei vielen Polygonen und komplexer Geometrie. Bei einer einfachen GUI mit nur ein paar Buttons und Fenstern ist es definitiv sinnvoller einfach die Cursor-Koordinaten direkt gegen die Quads zu testen, also ohne Umweg über OpenGL.


Jein, ab diesen Punkt kämen ja dann wieder andere Probleme hinzu, da müsstest du dann schon die komplette Logik usw über die GPU laufen lassen und diese dann nur noch
mit den Eventparameter füttern.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 13, 2012 19:20 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Verweis auf das Color-Picking Shader-Tutorial. Recht anschaulich erklärt:
http://wiki.delphigl.com/index.php/Tutorial_ColorPicking_Shader

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Zuletzt geändert von Lord Horazont am Do Jun 14, 2012 16:14, insgesamt 1-mal geändert.
url repariert


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jun 14, 2012 16:06 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hi,
ich wollte nun die Funktion glReadPixels (unter Linux) verwenden,und eigentlich nur einen Pixel auslesen, aber ich bekomme immer 0 bzw gar nix.

glReadPixels(x: TGLint; y: TGLint; width: TGLsizei; height: TGLsizei; format: TGLenum; _type: TGLenum; pixels: PGLvoid);

Verwende die Funktion nach Zeichnen der Polygone, vor SwapBuffer, DEPTH_TEST ist an.


z.B:

GLfloat Red1;

glReadPixels(mausX,mausY,1,1,GL_FLOAT,GL_RED, &Red1);

klappt nicht. Habe es auch mit verschiedenen Parametern für GlReadBuffer und verschiedenen formaten für glReadPixels versucht, nix.
mausX und mausY sind integers und laufen von 0 bis Auflösung, wenn ich die maus bewege, hab ich mir anzeigen lassen das klappt. Aber da wo der Pixel eingelesen werden soll is immer 0 bzw nix drin.

Woran kann das liegen?


Hab ein neues Thema dazu erstellt:
http://www.delphigl.com/forum/viewtopic.php?f=2&t=10467

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.011s | 15 Queries | GZIP : On ]