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

Composants VCL Delphi Discussion :

[GLScene] Persistance d'un mouvement d'objets


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut [GLScene] Persistance d'un mouvement d'objets
    Bonjour,

    J'utilise GLScene avec Berlin pour créer un éditeur de structure physique. Cette structure est composée de nombreuses TGLLines et cette structure peut bouger. Pour gérer cette animation j’utilise un TGLCadencer dans lequel à chaque passage je modifie les coordonnées des 2 points composants chaque TGLLines. L'animation est correcte.

    Je veux ajouter une option à mon animation: je veux garder visible tous les affichages de ce mouvement càd que je souhaite avoir une persistance (pas d'atténuation) opaque de mes objets en mouvement. En pièce jointe, vous avez deux images qui illustrent ma demande.

    Je pense qu'il y a une manière de faire sans avoir à créer autant de structures (c'est-à-dire une multitude de TGLLines) que de passages dans cadencer. J'ai regardé le TGLTrace mais je ne pense pas y arriver avec ce composant.

    Merci

    Nom : Init.png
Affichages : 298
Taille : 8,8 KoNom : Persistance.png
Affichages : 365
Taille : 11,0 Ko

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    parlons OpenGL

    1) l'écran est redessiné à chaque frame : cf SwapBuffers

    2) je suppose que GLScene efface le contenu de l'écran avant qu'il ne soit dessiné : cf glClear(GL_COLOR_BUFFER_BIT)

    cela fait des raisons pour lesquelles il est difficile de conserver l'affichage

    mais tu peux éventuellement jouer sur les CallList: cf glCallList

    en effet, tu peux enregistrer le rendu d'une frame dans une callList et rappeler cette frame lors du rendu suivant...à voir d'ailleurs s'il est possible d'appeler une liste quand on en crée une, ce qui permettrait de cumuler les frames comme tu le veux dans une seule callList

    après il faut trouver comme GLScene encapsule tout cela HAHAHA
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Bonjour Paul,
    Merci pour ta réponse.
    OK je comprends le principe, je vais regarder dans le code de GLScene si je retrouve ce type de traitement.

  4. #4
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    J'ai enfin pu regarder le code GLScene, je retrouve tes fonctions mais l'enchaînement et l'encapsulation ne sont pas évidents.

    En remontant le code j'ai trouvé ContextOptions dans le buffer du glScene. Si je mets roNoColorBufferClear à False, j'ai une certaine persistance mais aussi un problème: perte du background color.
    Nom : Clipboard01.jpg
Affichages : 280
Taille : 25,7 Ko

    Ca m'avance un petit peu... Je suis étonné de ne pas trouver facilement dans GLScene les composants et méthodes pour arriver à mon résultat.

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par lefju cabro Voir le message
    J'ai enfin pu regarder le code GLScene, je retrouve tes fonctions mais l'enchaînement et l'encapsulation ne sont pas évidents.

    En remontant le code j'ai trouvé ContextOptions dans le buffer du glScene. Si je mets roNoColorBufferClear à False, j'ai une certaine persistance mais aussi un problème: perte du background color.
    Nom : Clipboard01.jpg
Affichages : 280
Taille : 25,7 Ko

    Ca m'avance un petit peu... Je suis étonné de ne pas trouver facilement dans GLScene les composants et méthodes pour arriver à mon résultat.
    oui c'est logique, le glClear() utilise la glClearColor() pour remplir le fond d'écran

    2 solutions
    1- dessiner une rectangle sur le fond d'écran toi même
    2- déactiver roNoColorBufferClear après le premier rendu afin que la première image efface bien tout l'écran
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    J'ai essayé ta première solution qui est de dessiner une rectangle blanc. Pour cela, j'ai implémenté ce code dans l'évènement BeforeRender de ma scène en utilisant un TGLCanvas. Au premier passage dans BeforeRender je dessine un fond blanc puis je désactive cet évènement. Sur le fond blanc, je dessine mes objets en mouvement et je conserve la persistance. J'ai dû retirer l'option DoubleBuffered de mon Viewer pour éviter le scintillement.

    Merci pour tes conseils Paul

  7. #7
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Essaye peut-être de poser ta question sur le forum GLScene, Pavel Vassiliev y répond régulièrement et est souvent d'une aide redoutable

  8. #8
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    Essaye peut-être de poser ta question sur le forum GLScene, Pavel Vassiliev y répond régulièrement et est souvent d'une aide redoutable
    J'avais ouvert une discussion sur le forum GLScene ici mais malheureusement mon sujet n'a pas convaincu

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

Discussions similaires

  1. Probleme d'arret de mouvement sur objet
    Par PascalStl dans le forum Programmation multimédia/Jeux
    Réponses: 14
    Dernier message: 20/05/2013, 20h01
  2. Irrlicht 3D : Mouvement d'objets dans une scène
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 22/04/2013, 20h12
  3. Réponses: 1
    Dernier message: 05/05/2009, 17h57
  4. [hibernate3] Persistence d'une liste d'objets
    Par Sniper37 dans le forum Hibernate
    Réponses: 4
    Dernier message: 07/09/2007, 17h40
  5. GLScene et les collisions entre les objets
    Par HopeLeaves dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 13/06/2005, 19h45

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