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

Aktuelle Zeit: Fr Jul 18, 2025 08:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: JOGL+glTranslatef()
BeitragVerfasst: Sa Jun 20, 2009 18:04 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Hallo ;)
Ich habe nun endlich OpenGL unter Java zum Laufen bekommen. Allerdings habe ich nun das Problem, dass sobald ich gl.glTranslatef() benutze, ich nichts mehr sehe. Bei Google habe ich jemanden mit dem selben Problem entdeckt, hier wurde allerdings nur auf die Verwendung von gluPerspective verwiesen.

Hier mal der Code:
Code:
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import javax.media.opengl.*;
  5. import javax.media.opengl.glu.*;
  6. import com.sun.opengl.util.*;
  7.  
  8. public class GLTest implements GLEventListener {
  9.     GL gl;
  10.     GLU glu;
  11.     int width;
  12.     int height;
  13.     float nearClipping = 0.1f;
  14.     float farClipping = 100.0f;    
  15.     public static void main(String[] args) {
  16.         // Create a Window
  17.         Frame win = new Frame("GL Test");    
  18.         win.setSize(640, 480);  
  19.  
  20.         // JOGL        
  21.         GLCapabilities glCaps = new GLCapabilities();
  22.         glCaps.setRedBits(8);
  23.         glCaps.setBlueBits(8);
  24.         glCaps.setGreenBits(8);
  25.         glCaps.setAlphaBits(8);
  26.         GLCanvas canvas = new GLCanvas(glCaps);
  27.         final Animator anim = new Animator(canvas);
  28.         // Window Close Event
  29.         win.addWindowListener(new WindowAdapter() {
  30.             public void windowClosing(WindowEvent e) {
  31.                 new Thread(new Runnable() {
  32.                     public void run() {
  33.                         anim.stop();
  34.                         System.exit(0);
  35.                     }
  36.                 }).start();
  37.             }
  38.         });        
  39.         win.add(canvas);
  40.         canvas.addGLEventListener(new GLTest(640, 480));
  41.        
  42.         win.setVisible(true);
  43.         anim.start();        
  44.     }
  45.     public GLTest(int width, int height) {
  46.         this.width = width;
  47.         this.height = height;
  48.     }
  49.     public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
  50.     }
  51.     public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
  52.         this.width = width;
  53.         this.height = height;  
  54.         // Reset Viewport and Projection
  55.         gl.glViewport(0, 0, width, height);  
  56.         gl.glMatrixMode(GL.GL_PROJECTION_MATRIX);
  57.         gl.glLoadIdentity();
  58.         double ratio = (double)width/(double)height;
  59.         glu.gluPerspective(45.0f, ratio, nearClipping, farClipping);    
  60.     }
  61.     public void display(GLAutoDrawable drawable) {  
  62.         // Clear
  63.         gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);        
  64.         gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);      
  65.        
  66.         // Modelview Matrix        
  67.         gl.glMatrixMode(GL.GL_MODELVIEW_MATRIX);
  68.         gl.glLoadIdentity();
  69.        
  70.         gl.glBegin(GL.GL_QUADS);
  71.             gl.glColor3f(0.5f, 0.0f, 0.0f); gl.glVertex3f(0.0f, 0.0f, 0.0f);
  72.             gl.glColor3f(0.0f, 0.5f, 0.0f); gl.glVertex3f(0.5f, 0.0f, 0.0f);
  73.             gl.glColor3f(0.0f, 0.0f, 0.5f); gl.glVertex3f(0.5f, 0.5f, 0.0f);
  74.             gl.glColor3f(0.5f, 0.5f, 0.0f); gl.glVertex3f(0.0f, 0.5f, 0.0f);
  75.         gl.glEnd();        
  76.        
  77.         gl.glTranslatef(0.0f, 0.0f, -5.0f); // <--- HIER LIEGT DAS PROBLEM Oo
  78.  
  79.         gl.glBegin(GL.GL_QUADS);
  80.             gl.glColor3f(1.0f, 0.0f, 0.0f); gl.glVertex3f(0.0f, 0.0f, 0.0f);
  81.             gl.glColor3f(0.0f, 1.0f, 0.0f); gl.glVertex3f(1.0f, 0.0f, 0.0f);
  82.             gl.glColor3f(0.0f, 0.0f, 1.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f);
  83.             gl.glColor3f(1.0f, 1.0f, 0.0f); gl.glVertex3f(0.0f, 1.0f, 0.0f);
  84.         gl.glEnd();
  85.     }
  86.     public void init(GLAutoDrawable drawable) {
  87.         gl = drawable.getGL();
  88.         glu = new GLU();
  89.        
  90.         // Debug Mode
  91.         //drawable.setGL(new DebugGL(drawable.getGL()));  
  92.        
  93.         // Initialize Viewport and Projection
  94.         gl.glViewport(0, 0, width, height);    
  95.         gl.glMatrixMode(GL.GL_PROJECTION_MATRIX);
  96.         gl.glLoadIdentity();
  97.         double ratio = (double)width/(double)height;
  98.         glu.gluPerspective(45.0f, ratio, nearClipping, farClipping);            
  99.      
  100.         // Enable GL Functions
  101.         gl.glEnable(GL.GL_DEPTH_TEST);
  102.      //   gl.glEnable(GL.GL_CULL_FACE);        
  103.     }        
  104. }

Ohne das Translate wird der Kasten gezeichnet, wenn ich mich auf z-Achse um -1.0f bewege gehts auch noch, aber bei mehr fange ich an, nichts mehr zu sehen.
Woran mag das liegen?

Vielen Dank,

mfg


Zuletzt geändert von Seth am So Jun 21, 2009 15:19, insgesamt 4-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 20, 2009 19:30 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Mhh hab eben mal alle meine Backups durchgeschaut, aber leider sind selbst die ältesten schon mit einem gluLookAt versehen. Es kann gut sein, dass ich damals ein ähnliches Problem bei der Portierung hatte, aber da ich nun gluLookAt benutz, lässt sich der Fehler nicht so einfach rekonstruieren. Hast du das mal so getestet? Obs dann auch passiert?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 20, 2009 21:18 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Naja glTranslatef() werde ich so oder so brauchen, gar keine Frage, deshalb versuch ich das Problem auch so früh wie möglich aus der Welt zu schaffen. Besser man hat halt solche Probleme am Anfang (so wie ich ständig :P) , später ist das dann net mehr so schön :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 20, 2009 21:39 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nimm mal ne andere glTranslate Variante. z.B. Int oder Double. Geht das auch nicht?

Zeichne mal was davor und danach. Wir was gezeigt oder nix von beiden?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 21, 2009 09:33 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
glTranslated() geht ebenfalls nicht und wenn ich vorher was zeichne, wird eben das gezeichnet, alles danach aber nicht mehr.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 21, 2009 14:29 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Müsste es nicht eigentlich andersherum sein? Wenn ich als NearClipping etwas > 0 einstelle, müssten doch Objekte die bei z=0 liegen geclippt, also nicht gezeichnet, werden, oder?
Vielleicht funktionier gluPerspective nicht richtig, da wenn ich ein nicht quadratisches Fenster hab, mein Quadrat trotz gluPerspective immer noch zu einem Rechteck verzogen wird. Ich denke das sollte eigentlich vermieden werden oder?

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 21, 2009 16:53 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Irgendwie scheinst du ja die Maße deines Fensters von deiner gluPerspective loszulösen oder? Egal mit was für Werten du glTest initalisierst, du setzt das fenster immer auf 640,480

Wenn du es also mit 300x300 initialisierst, aber die Ratio entsprechend mit den falschen Werten berechnest, ist es eigentlich nicht verwunderlich, dass da was falsches rauskommt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 22, 2009 07:16 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Ich initialisiere es ja nicht mit 300x300. Den Quellcode oben hab ich angepasst um das zu veranschaulichen, dort wird ausschließlich 640x480 verwendet. Und die werden dann immer benutzt, bzw. beim Resize() neu bestimmt und gluPerspective und glViewPort dementsprechend angepasst.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 16:08 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Joahr das Problem besteht immer noch. Gibts denn hier keine JOGLer die sich damit auskennen? :D Die meisten Beispiele, die ich im Internet gefunden hab sind leider veraltet... Es war schon nicht leicht herauszufinden, wie man es überhaupt zum laufen bekommt, da wurde ja ständig irgendwie irgendwas geändert. :roll: Und was ich gefunden habe unterscheidet sich jetzt nicht grundlegend von dem, was ich hab :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 23, 2009 18:17 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Vielleicht kann dir mal jemand ein funktionierendes Template geben das du ausprobieren kannst. Ich denke nicht, dass es am Translate liegt.
Mein Code ist auf der Maschine an der ich sitze gerade nicht erreichbar. Aber wir haben andere JOGLer hier.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 10:03 
Offline
DGL Member

Registriert: Sa Aug 09, 2008 09:07
Beiträge: 112
Es liegt am near-far Clipping, alles zwischen -1.0 und 1.0 wird angezeigt.
Aber ich hab leider kA, wieso das so ist :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 10:50 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Ja ich gehe nämlich einfach davon aus, dass der gluPerspective Befehl einfach nichts tut und -1 und 1 die Default-Werte sind. Sehr seltsam auf jedenfall. Vielleicht muss ich GLU auch anders erzeugen, aber so hab ichs bisher immer gefunden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 11:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich benutze zwar selbst kein Java, aber kann es sein dass du die falschen Matrixkonstanten verwendest, und es statt
Code:
  1. gl.glMatrixMode(GL.GL_PROJECTION_MATRIX);
  2. gl.glMatrixMode(GL.GL_MODELVIEW_MATRIX);  


wie folgt heissen müsste :
Code:
  1. gl.glMatrixMode(GL.GL_PROJECTION);
  2. gl.glMatrixMode(GL.GL_MODELVIEW);  


Denn die Konstanten die du nutzt (u.a. GL_PROJECTION_MATRIX) sind eigentlich für glGet und nicht für das Wechseln das Matrizenmodus.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 11:48 
Offline
DGL Member

Registriert: Sa Aug 09, 2008 09:07
Beiträge: 112
Den Fehler hab ich auch schon einmal gemacht. Ist mir aber dieses Mal wieder nicht aufgefallen :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 24, 2009 16:11 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ist der Fehler damit behoben?

@Sascha: Gutes Auge. :!:

_________________
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  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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