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 :

[JOGL] Impossible d'activer le multisampling


Sujet :

3D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Par défaut [JOGL] Impossible d'activer le multisampling
    Bonjour,

    comme indiqué dans le titre, je ne parviens pas à activer le multisampling avec JOGL (2.0, version beta10 du 15/09/2009, trouvée ici). Le code ci-dessous, adapté d'un exemple trouvé sur la toile, affiche deux figures identiques, alors que celle de gauche devrait être lissée.

    Par ailleurs, les versions plus récentes de JOGL (comme par exemple celle-ci) semblent incomplètes (absence des fichiers libnativewindow_jvm.so et libjogl_gl2.so) : j'ai sûrement dû manqué une étape.

    Comme j'ai parcouru en vain des dizaines de pages en quête d'une réponse, je vous soumets mon problème, et toute aide ou suggestion sera donc la bienvenue.

    Cordialement.

    Note : je travaille avec Eclipse sous Ubuntu 9.10.

    PS : le problème est le même avec un GLJPanel en lieu et place du GLCanvas.

    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
    import javax.media.opengl.GL;
    import javax.media.opengl.GL2;
    import javax.media.opengl.GLAutoDrawable;
    import javax.media.opengl.GLCapabilities;
    import javax.media.opengl.GLEventListener;
    import javax.media.opengl.GLProfile;
    import javax.media.opengl.awt.GLCanvas;
    import javax.media.opengl.glu.GLU;
    import javax.swing.JFrame;
     
    public class Test extends JFrame implements GLEventListener {
     
    	public static void main(String[] args) {
    		new Test().run();
    	}
     
    	/*
    	 * Affiche la JFrame
    	 */
    	public void run() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(600, 300);
    		setLocationRelativeTo(null);
    		setVisible(true);
    	}
     
    	/*
    	 * La fenêtre contenant le GLCanvas
    	 */
    	public Test() {
    		super("MultiSampling Test");
     
    		GLCapabilities caps = new GLCapabilities(GLProfile.getDefault());
    		caps.setSampleBuffers(true); 	// Active le multisampling
    		caps.setNumSamples(8);			// Active le multisampling
    		GLCanvas canvas = new GLCanvas(caps);
    		canvas.addGLEventListener(this);
     
    		add(canvas);
    	}
     
    	/*
    	 * Initialise la figure à afficher
    	 * 
    	 */
    	public void init(GLAutoDrawable drawable) {
    		GL2 gl = drawable.getGL().getGL2();
     
    		//
    		int buf[] = new int[1];
    		int sbuf[] = new int[1];
     
    		gl.glClearColor(1f, 1f, 1f, 1f);
    		gl.glGetIntegerv(GL.GL_SAMPLE_BUFFERS, buf, 0);
    		System.out.println("number of sample buffers is " + buf[0]);
    		gl.glGetIntegerv(GL.GL_SAMPLES, sbuf, 0);
    		System.out.println("number of samples is " + sbuf[0]);
     
    		gl.glNewList(1, GL2.GL_COMPILE);
    		for (int i = 0; i < 19; i++) {
    			gl.glColor3f(0f, 0f, 0f);
    			gl.glPushMatrix();
    			gl.glRotatef(360.0f * (float) i / 19.0f, 0.0f, 0.0f, 1.0f);
    			gl.glBegin(GL.GL_LINES);
    			gl.glVertex2f(0.25f, 0.05f);
    			gl.glVertex2f(0.9f, 0.2f);
    			gl.glEnd();
    			gl.glPopMatrix();
    		}
    		gl.glEndList();
     
    	}
     
    	/*
    	 * Affiche deux figures
    	 * 
    	 */
    	public void display(GLAutoDrawable drawable) {
    		GL2 gl = drawable.getGL().getGL2();
    		gl.glClear(GL.GL_COLOR_BUFFER_BIT);
     
    		gl.glEnable(GL.GL_MULTISAMPLE); // première figure lissé
    		gl.glPushMatrix();
    		gl.glTranslatef(-1.0f, 0.0f, 0.0f);
    		gl.glCallList(1);
    		gl.glPopMatrix();
     
    		gl.glDisable(GL.GL_MULTISAMPLE); // seconde figure sans traitement
    		gl.glPushMatrix();
    		gl.glTranslatef(1.0f, 0.0f, 0.0f);
    		gl.glCallList(1);
    		gl.glPopMatrix();
     
    		gl.glFlush();
    	}
     
    	/*
    	 * Au cas où la fenêtre est redimensionnée
    	 * 
    	 */
    	public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
    		GL2 gl = drawable.getGL().getGL2();
    		GLU glu = new GLU();
    		//
    		gl.glViewport(0, 0, w, h);
    		gl.glMatrixMode(GL2.GL_PROJECTION);
    		gl.glLoadIdentity();
    		if (w <= (2 * h))
    			glu.gluOrtho2D(-2.0, 2.0, //
    					-2.0 * (float) h / (float) w, 2.0 * (float) h / (float) w);
    		else
    			glu.gluOrtho2D(-2.0 * (float) w / (float) h, //
    					2.0 * (float) w / (float) h, -2.0, 2.0);
    		gl.glMatrixMode(GL2.GL_MODELVIEW);
    		gl.glLoadIdentity();
    	}
     
    	@Override
    	public void dispose(GLAutoDrawable drawable) {
    	}
    }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Cela fonctionne sous un autre programme opengl que le tiens ?

    Si non, alors as tu bien mis l'option "controle par l'application" ou quelque choses dans le gout, dans l'anticrenelage de ton driver ? (si elle existe)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Par défaut
    Salut,

    pardonne-moi, mais je ne comprends pas bien ce que tu me demandes.

    Cela fonctionne sous un autre programme opengl que le tiens ?
    Ma question concernait JOGL, et je ne vois pas ce que entends par "un autre programme opengl". En revanche, je n'ai pas la possibilité de tester le code ci-dessus sur une autre machine, et si quelqu'un a deux minutes à perdre, ça m'aiderait à cerner le problème.

    Si non, alors as tu bien mis l'option "controle par l'application" ou quelque choses dans le gout, dans l'anticrenelage de ton driver ? (si elle existe)
    Je ne vois pas du tout de quoi tu parles.

    Merci pour ta réponse néanmoins.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Par défaut
    Salut,

    autre bizarrerie rencontrée à l'instant : le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gl.glMatrixMode(GL2.GL_MODELVIEW);
    gl.glLoadIdentity();
     
    double[] buf = new double[16];
    gl.glGetDoublev(GL2.GL_MODELVIEW, buf, 0);
     
    System.out.println(buf[0]+" "+buf[4]+" "+ buf[8]+" "+buf[12]);
    System.out.println(buf[1]+" "+buf[5]+" "+ buf[9]+" "+buf[13]);
    System.out.println(buf[2]+" "+buf[6]+" "+buf[10]+" "+buf[14]);
    System.out.println(buf[3]+" "+buf[7]+" "+buf[11]+" "+buf[15]);
    me donne la sortie suivante, que j'ai bien du mal à appeler matrice identité :

    8.0320372085262E-268 6.365987374E-314 1.0609978955E-313 8.4879831653E-314
    2.0028889041184325E-268 2.0E-323 1.06099789573E-313 1.0609978955E-313
    8.132485733192058E-268 1.06099789573E-313 2.5E-323 1.06099789573E-313
    2.121995791E-314 1.06099789573E-313 4.2439915824E-314 2.5E-323
    Je pense que le problème vient de la version de JOGL utilisée.

    Cordialement.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    - Un autre programme opengl, je ne sais pas comment te traduire ca mieux ^^,

    Ton programme utilise OPENGL (JOGL etant une surcouche, si je puis m'exprimer ainsi, permettant de faire de l'opengl dans java, comme il existe encore LWGL et surement d'autres). voila pourquoi je parle d'opengl.

    Par autre programme opengl j'entendais, un jeu, un programme 3D quelquonques (sous linux tu va certainement en trouver plus facilement que sous windows vu que y'a pas directx). Si le pogramme gere l'antialising (ou que tu force celui ci dans les param du drivers graphique) alors tu verras si oui ou non ton code peut etre en cause.

    Pour l'option d'antialising, sous windows (et sous linux dans mes anciens souvenirs) sont disponible dans les parametres du driver de ta carte graphique.

    soit elle est mise a "Controlled by application" (ce qui est en general la valeur par defaut), soit forcée a une valeur, soit Disabled.

    Si evidement c'est mis sur disabled, tu peux a mon avis toujours essayer avec ton code tu n'auras pas de full antialising (je parle pas LINE_SMOOTH et POLYGON_SMOOTH qui fonctionnent quand meme malgré ce parametres).

    Ton code je l'ai essayé mais je ne sais pas le compiler avec mes versions de jogl et j'ai la flemme de chercher

    J'espere que je n'ai pas dit trop de connerie ^^
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Par défaut
    Ok, je n'avais pas saisi : je vais tâcher de trouver quelque chose qui me confirme que l'antialiasing est disponible.

    Citation Envoyé par wax78 Voir le message
    Ton code je l'ai essayé mais je ne sais pas le compiler avec mes versions de jogl et j'ai la flemme de chercher
    J'ai l'impression que la version de JOGL que j'ai récupérée n'est pas aboutie (cf. le message précédent) : quelle version utilises-tu ?

    Merci pour ton aide.

Discussions similaires

  1. [MySQL] Impossible d'activer l'extension MySQL
    Par cryborg dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/06/2007, 14h42
  2. [VS2003] Impossible d'activer des services requis pour l'installation
    Par 166BORAIZOL dans le forum Visual Studio
    Réponses: 1
    Dernier message: 16/03/2007, 09h10
  3. Skip-name-resolve - Impossible d'activer cet argument
    Par fenx06 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 15/01/2007, 09h56
  4. Impossible d'activer un index
    Par bencot dans le forum Administration
    Réponses: 11
    Dernier message: 05/09/2006, 09h24
  5. impossible d'activer pare-feu windows
    Par slim dans le forum Sécurité
    Réponses: 4
    Dernier message: 05/02/2006, 20h43

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