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

Aktuelle Zeit: Fr Jul 18, 2025 15:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objektselektierung in JOGL
BeitragVerfasst: Mo Jul 17, 2006 06:20 
Offline
DGL Member

Registriert: Fr Jul 14, 2006 15:40
Beiträge: 8
Hallo,

ich habe mir schon die Tutorials zur Objektselektierung durchgelesen und versucht in Jogl zu uebersetzen jedoch soll es mir einfach nicht gelingen. Ich habe auch bei anderen Tutorials (nehe, etc) nachgelesen, jedoch nichts gefunden.

Wenn also jemand das in Jogl schon mal hinbekommen hat, waere ich auf den Code gespannt, ansonsten wuerde ich mich ueber eine andere oder einfach komplette Variante in OpenGL freuen, so dass ich es nochmal mit dem uebersetzen versuchen kann.

Vielen Dank

mm_911


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 17, 2006 07:00 
Offline
DGL Member

Registriert: Fr Jul 14, 2006 15:40
Beiträge: 8
Hallo nochmal,

ich weiss immer noch nicht genau warum, aber mit nem neuen Grafikkartentreiber geht es jetzt dann doch. An dieser Stelle einmal danke fuer die sehr guten Tutorials. Falls dennoch jemand eine gute Quelle zu Jogl demos etc kennt kann er sie ja noch schreiben.

Danke

mm_911


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 17, 2006 14:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
JOGL ist auch nichts anderes als OGL unter Delphi. Du kannst also (wenn du ein funktionierendes Template hast) alles Beispiele aus unseren Tutorials problemlos nachbauen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 18, 2006 07:19 
Offline
DGL Member

Registriert: Fr Jul 14, 2006 15:40
Beiträge: 8
Hallo,

also so in etwa geht es, aber es ist etwas seltsam. Ich habe die Tastatur eingebunden, so dass ich meine Szene verschieben kann. Verschiebe ich nun die Szene nach rechts kann ich meine Objekte nicht mehr durch direktes daraufklicken anwaehlen, sondern es ist rechts daneben. Das selbe wenn ich alles nach links verschiebe, dann ist es zu weit links.

Kennt von euch jemand das Problem? Ich haenge mal meine Klasse, welche sich um das selektieren kuemmert mit dran


Code:
  1. public class ObjectSelectioner implements MouseListener {
  2.  
  3.     private double zNear, zFar, angle;
  4.  
  5.     private boolean mouseClicked;
  6.  
  7.     private MouseEvent event;
  8.  
  9.     public ObjectSelectioner(GLDrawable drawable, double angle, double zNear, double zFar) {
  10.         updatePerspective(angle, zNear, zFar);
  11.         drawable.addMouseListener(this);
  12.         mouseClicked = false;
  13.     }
  14.  
  15.     public void updatePerspective(double angle, double zNear, double zFar){
  16.         this.angle = angle;
  17.         this.zNear = zNear;
  18.         this.zFar = zFar;
  19.     }
  20.    
  21.         //Diese Methode wird aufgerufen, wenn die display-methode die Szene gerendert hat
  22.     public void updateSelectioner(GLEventListener listener, GLDrawable drawable) {
  23.         if (mouseClicked) {
  24.             mouseClicked = false;
  25.             int[] buffer = new int[256];
  26.             int[] viewport = new int[4];
  27.             int hits;
  28.  
  29.             GLU glu = drawable.getGLU();
  30.             GL gl = drawable.getGL();
  31.            
  32.             gl.glGetIntegerv(GL.GL_VIEWPORT, viewport);
  33.             gl.glSelectBuffer(256, buffer);
  34.             gl.glRenderMode(GL.GL_SELECT);
  35.            
  36.             gl.glMatrixMode(GL.GL_PROJECTION);
  37.             gl.glPushMatrix();
  38.             gl.glLoadIdentity();
  39.  
  40.             System.out.println("x: "+event.getX()+"  y: "+ (viewport[3] - event.getY()));
  41.             glu.gluPickMatrix(event.getX(), viewport[3] - event.getY(), 1, 1,
  42.                     viewport);
  43.             glu.gluPerspective(angle, viewport[2] / viewport[3], zNear, zFar);
  44.  
  45.             listener.display(drawable);
  46.            
  47.             gl.glMatrixMode(GL.GL_PROJECTION);
  48.             gl.glPopMatrix();
  49.  
  50.             hits = gl.glRenderMode(GL.GL_RENDER);
  51.            
  52.             int nearest = Integer.MAX_VALUE;
  53.             int object = -1;
  54.             for (int i=0; i<hits; i++){
  55.                 if (nearest > buffer[i*4+1]){
  56.                     nearest = buffer[i*4+1];
  57.                     object  = buffer[i*4+3];
  58.                 }
  59.             }
  60.             System.out.println("treffer:"+ hits +"  Oject-nummer: "+object);
  61.                    
  62.         }
  63.     }
  64.  
  65.     public void mouseClicked(MouseEvent e) {
  66.         this.event = e;
  67.         mouseClicked = true;
  68.     }



Vielen Dank schonmal

mm_911


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 18, 2006 14:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Auch wenn ich mich mit Java nicht auskenne, scheint es als ob du für Zeichnen und Selektion nicht die gleiche Matrix hast. Dann kommte es zu solchen Effekten.

Gruß
Martok

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 19, 2006 07:39 
Offline
DGL Member

Registriert: Fr Jul 14, 2006 15:40
Beiträge: 8
Oh Mann war das einfach!!!

Der Fehler in dem ganzen war hier:

Code:
  1. glu.gluPickMatrix(event.getX(), viewport[3] - event.getY(), 1, 1, viewport);
  2.   //Zwischenspeichern des genauen Teilverhaeltnisses
  3. double h = (double)viewport[2] / (double)viewport[3];
  4.   //Verwenden des korrekten Teilverhaeltnisses
  5. glu.gluPerspective(angle, h, zNear, zFar);


Vorher habe ich einfache Integerwerte geteilt, also konnte nurn ganzzahliger Wert rauskommen. Erst durch die Typumwandlungen der integer-Werte habe ich jetzt das richtige Verhaeltnis von Breite zu Hoehe.

Danke fuer den Tipp mit der Matrix!

mfg mm_911


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 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.009s | 15 Queries | GZIP : On ]