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

Aktuelle Zeit: Fr Jul 18, 2025 16:44

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 2 verschiedene "Selections"
BeitragVerfasst: So Apr 15, 2007 17:45 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Nov 18, 2005 18:28
Beiträge: 26
Hi Leute,

3 meiner Studienkollegen und ich arbeiten gerade an einem Projekt, welches als Zulassung für die Prüfung im Sommer dienen soll. Dafür ist es notwendig, dass die UI per OpenGL realisiert wird. Eigentlich sollte es ja Java in Verbindung mit SWT sein, aber letzten Endes läuft es nun doch glücklicherweise auf OGL hinaus.

Ok, zu meiner Frage: Wir haben erfolgreich eine Routine implementiert, die uns die Hits in der 2D-UI abnimmt, d.h. für die UI arbeiten wir im orthogonalen Modus. In unserem "Viewport", also jener Bereich, wo unser Programm später die graphische Ausgabe bieten soll, wird es 3D-Icons geben, die man anwählen und diese auch bewegen können soll. Dort arbeiten wir also im perspektivischem Modus.
Wir haben nun schon ein eigenes Objekt für jene Icons erstellt. Es wird aus 8 Quads zusammengesetzt, welche sich in Form 2er mit der Grundseite aufeinander gestellte Pyramiden ergeben. Dies sind quasi Wegpunkte auf einer Landkarte.
Leider kann ich dieses "Icon" nicht anwählen, d.h. meine 2. Selectionfunktion bringt kein Erfolg, obwohl die Rendermodi 100% übereinstimmen. Kann man denn bei dem Event OnMouseDown der Hauptform keine 2 Selections per CASE OF abfragen?

Wir versuchen das im Prinzip so:

1. Prüfe ob UI irgendwas geklickt -> dann tu was.
2. Prüfe ob im 3D Viewport was geklickt wird -> dann tu was.

Problem dabei: Die Scene flackert ultramäßig kurz hell auf und es passiert aber nichts. Wir bräuchten also einen Hinweis wie 2 Selectionabfragen in einer Anwendung realisierbar wären, also nur das Grundprinzip. Oder sollte die Selektion im 3D Modus durch das sog. Picking ersetzt werden? Ich las es gerade im Redbook, nur habe ich mich damit noch nicht beschäftigt.

Also, hoffe, jemand versteht mein Kauderwelsch und kann uns ein paar Tipps geben. :-)
Thx in advance. Killian

_________________
Die Antwort ist 17, aber wie lautet die Frage?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 16, 2007 00:07 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Innerhalb des Orthomodus kann man seeehr gut auf Selektion verzichten. Wenn du die GUI Pixelgenau machst, und du die Position deiner Objekte kennst, kannst du leicht testen welches Objekt du getroffen hast.

Ich hab ne GUI für Java und OpenGL geschrieben welche genau das macht. Wollte die eigentlich auch irgendwann mal veröffentlichen. Allerdings ist die noch "Beta" (hin und wieder finde ich halt blöde Fehler.)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 16, 2007 07:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Flash hat recht. Du musst für den Orthomodus kein kompliziertes Picking realisieren.
Wenn Du Deinen ViewPort (nur für Ortho!) so organisierst, dass seine Höhe und Breite mit dem Client-Bereich Deines Fensters übereinstimmen und außerdem der Koordinatenursprung in der oberen linken Ecke des Fensters ist, dann sind die Mauskoordinaten, wie sie im OnMouseClick/OnMouseMove geliefert werden, genau richtig:

Code:
  1. // Viewport setzen:
  2. glViewport(0,0,ClientWidth,ClientHeight);


Code:
  1. // Orthomodus einschalten:
  2. Procedure TRenderer.OrthoSandBoxON;
  3. Var
  4.    Viewport: Array [0..3] Of Integer;
  5. Begin
  6.    glMatrixMode(GL_PROJECTION);
  7.    glPushMatrix;
  8.    glLoadIdentity;
  9.    glGetIntegerv(GL_VIEWPORT, @Viewport);
  10.    glOrtho(0,ViewPort[2],ViewPort[3],0,+1,-1);
  11.  
  12.    glMatrixMode(GL_MODELVIEW);
  13.    glPushMatrix;
  14.    glLoadIdentity;
  15. End;
  16.  
  17. // Orthomodus ausschalten:
  18. Procedure TRenderer.OrthoSandBoxOFF;
  19. Begin
  20.    glMatrixMode(GL_MODELVIEW);
  21.    glPopMatrix;
  22.    glMatrixMode(GL_PROJECTION);
  23.    glPopMatrix;
  24. End;


Es könnte sein, dass Du für das Ein/Ausschalten des Orthomodus auch die Befehle glPushAttrib/glPopAttrib brauchst.

Achtung! Durch das Versetzen des Ursprungs nach links oben kehren sich die Texturen um. Du müsstest das in den Texturkoordinaten berücksichtigen (oder die Textur selber flippen).

Wenn Du den Ursprung links unten belassen möchtest, dann könntest Du einfach die Y-Mauskoordinate korrigieren (ist vielleicht sogar weniger Arbeit als jetzt alle Texturkoordinaten zu berichtigen).

Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 16, 2007 13:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die KOU sollte man vorallem dann oben Links machen, wenn der Nutzer die Fenstergröße verändern kann. Wenn der Inhalt sich nicht wie gewöhnlich dabei verhält ist das sonst ein Bruch mit der "Erwartungshaltung".

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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 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.022s | 15 Queries | GZIP : On ]