Bonjour à tous.
Je travail actuellement sur un logiciel de calcul sur pièce mécanique qui inclus également un outils de visualisation des pièce mécanique en 3D.
Mon environnement de développement est Embarcadero® RAD Studio XE et tout est fait en C++.
Ces vues 3d sont faite avec OpenGL et il peut y avoir plusieurs vues ouverte en même temps.
J'aurais besoins, pour un nouveau module du logiciel , de créer un fenêtre contenant les aperçus de toutes les vue 3D ouverte. Un petit peu comme la fenêtre qui apparait sous Vista lorsqu'on fait alt+tab pour naviguer entre les fenêtres.
Pour le moment j'arrive à lister toutes les vue 3D ouvertes, ça aucun problème. Je récupère les TForm associées également.
Ensuite, pour l'aperçu, j'ai essayé différentes techniques :
- L'utilisation de la fonction GetFormImage() de la classe TForm me fait un screenshot de la TForm mais sans la vue 3D. La zone ou devrait apparaitre la vue est tout simplement vide.
-L'utilisation de la fonction glReadPixels. C'est avec cette fonction que j'ai eu les meilleurs résultats. Le hic c'est que je passe par un fichier temporaire pour convertir les pixel en un object Graphics::TBitmap.
Ne connaissant pas du tout le fonctionnement d'OpenGL j'ai repris les méthode de ce site pour la lecture des pixel et l'écriture du fichier .bmp
http://neogamedev.chable.net/index.php?PageID=2018 (section "Ecrire une image Bitmap")
Et il y aussi d'autres petits soucis avec cette méthode :
Si la fenêtre TForm contenant la vue 3D a été réduite à un très petit format (100x100 par exemple), le fichier .bmp temporaire créé est valide (selon l'aperçu windows).
Mais si ma fenêtre est agrandie le fichier .bmp créé n'est plus valide(selon l'aperçu windows toujours), mais je peu tout de même le visualiser avec paint. Et les couleurs de ma pièce mécanique ne correspondent plus à ma vue 3D.
Dans tous les cas j'arrive à charger l'image dans un objet Graphics::TBitmap à l'aide de la méthode LoadFromFile. Je redimensionne mon image à une taille d'environ 150x150 pour en faire un aperçu. Et après redimensionnement j'ai un autre soucis, mon image manque de netteté.
Donc au final je souhaiterai savoir pourquoi l'utilisation de la méthode glReadPixel et l'écriture de l'image dans un fichier échoue si ma vue 3D est "trop grande".
Et je souhaiterai également savoir s'il existe des techniques pour améliorer la netteté à l'affichage d'un objet Graphics::TBitmap (à l'aide de filtre ou autre).
Merci d'avance!!!!
Partager