begin process at 2012 02 12 16:55:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Multimédia

 > 

Java2D

 > 

SWT et opengl


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SWT et opengl

samedi 27 septembre 2008 à 18:59:08 | SWT et opengl

shintaa

Bonjour,

Je suis en train de développer un éditeur de map en mélangeant swt et opengl. Pour le moment j'affiche juste une liste à gauche avec les futurs apercus des textures, une liste à droite vide et un composite au milieu avec un GLCanvas pour pouvoir dessiner ma map à l'intérieur. Je me contente de dessiner seulement les cases de la map en mode polygone mais lorsque j'essaie de me déplacer sur la map grâce aux touches droite/gauche/haut/bas il se produit un lag et ca fait des à coups.

Voila la classe map qui s'occupe de gérer l'affiche de la carte dans le composite du milieu.

Si quelqu'un a déjà eu un problème similaire ou a une idée d'ou cela peut venir, je le remercie de lire la suite :)

public class Map {
    GLCanvas        canvas;
    int width;
    int height;
    static double tan60 = 1.73;
    float x = 0, y = 0, vx = 0, vy = 0;
    long fps = 50;
   
   
    void drawCase(float x, float y, float z, float d)
    {
        GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
        GL11.glPushMatrix();
        GL11.glTranslatef(x, y, z);
       
         GL11.glBegin(GL11.GL_QUADS);
            GL11.glVertex2d(0 - (tan60 * d) / 2.0, 0 + d / 2);

            GL11.glVertex2d(0, 0);

            GL11.glVertex2d(0 + (tan60 * d) / 2.0, 0 + d / 2);

            GL11.glVertex2d(0, 0 + d);
  
         GL11.glEnd();
         GL11.glPopMatrix();
        // GL11.glPolygonMode(0, 0);
      // GL11.glDisable(GL11.GL_POLYGON_MODE);       
    }
   
    void    init(Composite comp)
    {
        GLData data = new GLData ();
        data.doubleBuffer = true;
        canvas = new GLCanvas(comp, SWT.NONE, data);
        canvas.setCurrent();
        try
        {
            GLContext.useContext(canvas);
        }
        catch (LWJGLException e)
        {
            e.printStackTrace();
        }
        GL11.glDisable(GL11.GL_DEPTH_TEST);
    }

    Map(Composite comp)
    {   
        init(comp);
   
        //
        // Si il y a une resize on remet à jour l'écran.
        //
        canvas.addListener(SWT.Resize, new Listener()
        {
            public void handleEvent(Event event)
            {
                Rectangle bounds = canvas.getBounds();
                canvas.setCurrent();
                try
                {
                    GLContext.useContext(canvas);
                }
                catch (LWJGLException e)
                {
                    e.printStackTrace();
                }
                GL11.glViewport(0, 0, bounds.width, bounds.height);
                GL11.glMatrixMode(GL11.GL_PROJECTION);
                GL11.glLoadIdentity();
                GLU.gluOrtho2D(0.0f, bounds.width, 0.0f, bounds.height);
                GL11.glMatrixMode(GL11.GL_MODELVIEW);
                GL11.glLoadIdentity();
            }
        });

        //
        // Pour se déplacer sur la map on check les touches pressées.
        //
        canvas.addKeyListener(new KeyListener ()
        {
            public void keyPressed(KeyEvent key)
            {
                if (key.keyCode == SWT.ARROW_RIGHT)
                    vx = -5;
                if (key.keyCode == SWT.ARROW_LEFT)
                    vx = 5;
                if (key.keyCode == SWT.ARROW_DOWN)
                    vy = 5;
                if (key.keyCode == SWT.ARROW_UP)
                    vy = -5;
            }

            public void keyReleased(KeyEvent key)
            {
                if (key.keyCode == SWT.ARROW_RIGHT)
                    vx = 0;
                if (key.keyCode == SWT.ARROW_LEFT)
                    vx = 0;
                if (key.keyCode == SWT.ARROW_DOWN)
                    vy = 0;
                if (key.keyCode == SWT.ARROW_UP)
                    vy = 0;
            }
      
        });
       
       
        //
        // Affichage de la map
        //
        Display.getCurrent().asyncExec(new Runnable()
        {
            int rot = 0;
            public void run()
            {
                if (!canvas.isDisposed())
                {
                    canvas.setCurrent();
                    try
                    {
                        GLContext.useContext(canvas);
                    }
                    catch (LWJGLException e)
                    {
                        e.printStackTrace();
                    }
                    long currentTime1 = System.currentTimeMillis();
                    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
                    GL11.glLoadIdentity();
                    GL11.glTranslatef(0.0f, 0.0f, 0.0f);

                    float d = 60.0f;
                    int pair = 0;
                    x += vx;
                    y += vy;
                   
                  drawCase(x, y, 0, d);
                 
                  canvas.swapBuffers();
                  Display.getCurrent().asyncExec(this);

                  // Synchronisation FPS
                  long currentTime2 = System.currentTimeMillis();
                  long res = 1000 / fps - currentTime2 - currentTime1;
                  if (res > 0)
                  {
                    try
                      {
                        wait(res);
                      }
                     catch (InterruptedException ex)
                      {
                        Logger.getLogger(Map.class.getName()).log(Level.SEVERE, null, ex);
                      }
                  }
                }
            }
        });
    }
}

--
Marie
jeudi 2 octobre 2008 à 12:40:13 | Re : SWT et opengl

gouessej

Réponse acceptée !
Bonjour

Au lieu de faire un wait, utilise la synchronisation verticale, je sais que dans JOGL, tu as une méthode glSetSwapInterval, je ne sais pas quel est l'équivalent via LWJGL mais tu dois pouvoir le trouver dans la documentation. Sous JOGL, on a aussi une classe FPSAnimator pour faire la même chose que ce que tu fais dans ton instance de Runnable à la fin, il y a aussi un équivalent sous LWJGL, je te conseille de demander à des experts sur le forum www.javagaming.org dans la section consacrée à LWJGL.


TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
jeudi 2 octobre 2008 à 13:11:49 | Re : SWT et opengl

shintaa

Bonjour,

Merci pour les infos je regarderais ça ce soir.
Par contre en passant mon éditeur sur un pc avec comme OS windows XP, il fonctionne correctement. Mon OS à moi est Windows Vista, peut être que ca venait aussi d'ici.
Je vais quand même jeter un oeil dans la doc LWJGL pour la synchro verticale.

Mici,

--
Marie



Cette discussion est classée dans : swt, key, map, canvas, gl11


Répondre à ce message

Sujets en rapport avec ce message

Le Mapping en Java: Map(Key,Value) [ par developppez ] Bonjour,Je cherche à comprendre une longue classe java, qui essentiellement se base sur le mapping, comme exemple de méthode pour cette classe qui est Afficher image tiff dans un composant swt [ par juanfs ] Salut,Je voudrais savoir si quelqu'un sait comment afficher une image tiff dans un composant swt. Car lorque je la charge j'ai l'erreur comme quoi le Utiliser un JLabel Dynamique dans un event du meme JLabel [ par minosubb ] BonjourJ'ai crée une Map composée de 4 couches de 121 JLabel (pour l'instant, c'est ce que j'ai trouve pour gerer les passages de perso devant et derr probleme de log avec l api log4j [ par hamster007 ] bonjour à tous; voila mon logger marche bien lorsque que je l'utilise d'un main de test, mais des que je l insere dans mon appli (sous eclipse) ben utiliser un look & feels pour SWT/JFace [ par hamster007 ] bonnjour ,savez vous si il existe l equivalent du look & feels de SWING pour l api SWT/JFace?? je suis tout ouie a vos pistes!!!merci d avance Jasperreport et Spring [ par ouatouch ] Bonjour tous le monde  :Je suis entrain de developpez un module de generation des rapport pour une application j2ee (jsf spring hibernat) mon travail Obtenir la liste de valeur d'ArrayList dans une hashmap [ par Jonathan_Harvey ] Bonjour , J'ai cherché à savoir si il existe une question identique dans le forum mais je n'ai rien trouvéVoici donc mon problème :J'ai crée une hashm Probleme Méthode Paint et ActionListener [ par Karibou95 ] Bonjour à tous :) Voici mon probleme : J'ai une class Repere_Canavas dans laquelle j'ai la méthode paint, jusqu'a la tout va bien mon canvas s'affic Probleme Thread et repaint [ par Karibou95 ] Bonjour, J'ai plusieurs questions : Tout d'abord j'ai crée un canvas dans lequel je voudrais faire bouger un point , le probleme c'est que avec repa composant Tree ou TableTreeViewer [ par coltman ] Bonjour,alors j'étais en train d'explorer de nouveaux moyens pour realiser mon interface graphique et je suis tombé sur pas mal de trucs notemment les


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,416 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales