IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Java Discussion :

Afficher plusieurs GLCanvas


Sujet :

3D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut Afficher plusieurs GLCanvas
    Bonsoir ,

    J'essaye actuellement d'utiliser jogl2 et j'aimerai savoir s'il est possible d'afficher 2 (ou plusieurs) GLCanvas dans une fenêtre swing? J'ai déjà essayé et je n'y arrive pas, il y a un bug d'affichage (je crois ...).

    Voilà le morceaux de code que j'ai écris pour tester. Le bouton sert a rendre un canvas visible et l'autre invisible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    public class Main{
    	static {
    		GLProfile.initSingleton(true);
    	}
    	GLUT glut = new GLUT();
    	GLU glu = new GLU();
    	FPSAnimator animator;
    	FPSAnimator animator2;
     
    	GLCanvas viewCanvas;
    	GLCanvas viewCanvas2;
    	boolean visibility = false ;
     
    	public Main(){
    		GLProfile glp = GLProfile.getDefault();
    		GLCapabilities caps = new GLCapabilities(glp);
     
    		// création des canvas
    		viewCanvas = new GLCanvas(caps);
    		viewCanvas.addGLEventListener(new TotoListener(Color.WHITE));
    		viewCanvas2 = new GLCanvas(caps);
    		viewCanvas2.addGLEventListener(new TotoListener(Color.GREEN));
    		viewCanvas.setPreferredSize(new Dimension(300, 300));
    		viewCanvas2.setPreferredSize(new Dimension(300, 300));
     
    		// animation
    		animator = new FPSAnimator( viewCanvas, 60);
    		animator.add(viewCanvas);
    		animator.start();
    		animator2 = new FPSAnimator( viewCanvas2, 60);
    		animator2.add(viewCanvas2);
    		animator2.start();
     
     
    		// bouton pour changer le canvas visible 
    		JButton but = new JButton("change");
    		but.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
     
    				viewCanvas.setVisible(visibility);
    				viewCanvas2.setVisible(!visibility);
     
    				if(viewCanvas.isVisible()){
    					animator2.stop();
    					animator.start();
    				}
    				else if(viewCanvas2.isVisible()){
    					animator.stop();
    					animator2.start();
    				}
    				visibility = !visibility;
    			}
    		});
     
    		JFrame frame = new JFrame();
    		frame.getContentPane().setLayout(new BorderLayout());
     
    		frame.getContentPane().add(BorderLayout.EAST,viewCanvas);
    		frame.getContentPane().add(BorderLayout.WEST,viewCanvas2);
    		frame.getContentPane().add(BorderLayout.SOUTH,but);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.pack();
    		frame.setLocationRelativeTo(null); // au milieu
    		frame.setVisible(true);
    	}
     
     
    	public static void main(String[] args) {
    		SwingUtilities.invokeLater(new Runnable() {
    			@Override
    			public void run() {
    				Main m = new Main();
    			}
    		});
    	}
     
     
    	//Listener
    	class TotoListener implements GLEventListener{
    		float r,g,b;
    		public TotoListener(Color c){
    			r = c.getRed();
    			g = c.getGreen(); 
    			b = c.getBlue();
    		}
    		@Override
    		public void display(GLAutoDrawable drawable) {
    			GL2 gl = drawable.getGL().getGL2();
    			gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    			gl.glLoadIdentity();
    			gl.glTranslatef(0f, 0.0f, -6);
    			gl.glColor3f(r, g, b);
    			glut.glutWireSphere(1, 20, 20);
     
    		}
     
    		@Override
    		public void dispose(GLAutoDrawable drawable) {
    		}
     
    		@Override
    		public void init(GLAutoDrawable drawable) {
    		}
     
    		@Override
    		public void reshape(GLAutoDrawable drawable, int x, int y, int width,
    				int height) {
    			GL2 gl = drawable.getGL().getGL2();
    			gl.glViewport(0, 0, width, height);
    			gl.glMatrixMode(GL2.GL_PROJECTION);
    			gl.glLoadIdentity();
     
    			glu.gluPerspective(45.0f, (float) (width) / (float) (height), 1.0f,100.0f);
    			gl.glMatrixMode(GL2.GL_MODELVIEW);
    			gl.glLoadIdentity();
    		}
    	}
     
    }
    J'espère que ce n'est pas peine perdue

    iBou

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    J'ai testé le code sur différente machine, et il marche en fonction de la machine. Je pense que c'est un problème de pilote de carte graphique.

    La configuration où ça plante :
    • windows 7 x64 - GeForce GT 325M


    Les configurations qui marchent :
    • Ubuntu 10.04 x32 - ATI Radeon X1300
    • Machine virtuelle Windows XP - GPU Universal


    Je vais faire des test sur windows 7 x64 avec le GPU intégré, et aussi sur une machine virtuelle linux, et je tiens au courant pour ceux qui auront un jour le même problème.

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    A priori il ne te reste plus qu'à aller faire un bug report sur le JIRA de Jogl: http://java.net/jira/browse/JOGL

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    C'était bien une histoire de pilote. Une petite mise à jour et tout marche comme il faut .

    En tout cas si jamais quelqu'un rencontre ce genre de problème ça sera une des pistes à explorer.

    @+

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    A priori il ne te reste plus qu'à aller faire un bug report sur le JIRA de Jogl: http://java.net/jira/browse/JOGL
    Ce n'était pas du a un bug jogl mais à une inattention de ma part :-). Merci pour le lien, il pourra m'être utile.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] afficher plusieurs enregistrements par page par page à la volée
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/03/2006, 12h22
  2. [VB.NET]Afficher plusieurs UserControls dans un Panel
    Par Golzinne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/02/2006, 21h29
  3. [FLASH 8] Afficher plusieurs images
    Par robocop2776 dans le forum Flash
    Réponses: 2
    Dernier message: 02/02/2006, 09h10
  4. [C#] Un composant pour afficher plusieurs lignes ?
    Par Tips dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/12/2005, 19h47
  5. afficher plusieurs numeros pour un nom
    Par allowen dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2005, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo