Chargement de fichier *.3ds dans GLScene

Résolu
Alberic81 Messages postés 13 Date d'inscription dimanche 10 septembre 2006 Statut Membre Dernière intervention 3 octobre 2011 - 28 sept. 2011 à 10:00
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 3 oct. 2011 à 16:11
Bonjour,

Je travaille actuellement avec GLScene et tout fonctionne correctement sauf pour le temps de chargement très long.

En effet, j'ai beaucoup d'objets en *.3ds que je charge sur des TGLFreeForm dans le OnCreate de la Form.

Vue que ce sont toujours les même fichiers *.3ds que je charge, je me demandé s'il était possible de les pré charger directement dans Delphi avant de compiler et éviter ainsi de les charger à l'exécution.
Un peu à la manière d'une image dans le Picture d'un TImage.

Merci de votre aide !

9 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 sept. 2011 à 15:49
Bonsoir,

tu peux utiliser un fichier de ressources
dans lequel tu peux pratiquement tout stocker.

voir méthode créée par DelphiCool

cantador
3
Alberic81 Messages postés 13 Date d'inscription dimanche 10 septembre 2006 Statut Membre Dernière intervention 3 octobre 2011
29 sept. 2011 à 11:40
Merci Cantador

J'ai essayé d'utiliser un fichier de ressources.

A première vue ca marche bien jusqu'au chargement du fichier dans Res (TResourceStream) mais c'est après que ca se gâte.

Quand je fais ??FreeForm.LoadFromStream('AVION',Res);?? j'ai le message d'erreur ??Failed to store GIF on clipboard??.

J'explique ma démarche :
-j'ai modifié le fichier ressource de DelhiCool avec ??Ressource Hacker?? :
-Add a new Ressource
-je charge mon fichier.3ds
-Ressource Type : GLSCENE
-Ressource Name : AVION
-Ressource Language : 1033 (Je sais pas trop ce qu'il faut et j'ai essayé 1036 et 0 mais pas de changement)
j'ai lu que 1033 c'est pour l'Anglais puis 1036 et 0 sont utilisés par DelphiCool.

-Je suis parti du source de DelphiCool et j'ai ajouté mon GLScene.

-Sur un bouton j'ai :
procedure TForm1.Button17Click(Sender: TObject);
var
FreeForm : TGLFreeForm;
begin
FreeForm := TGLFreeForm.Create(GLDummyCube1);
Res := TResourceStream.Create(hinstance, 'AVION', 'GLSCENE');
FreeForm.LoadFromStream('AVION',Res);
FreeForm.BuildOctree;
end;
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 sept. 2011 à 13:49
versions de delphi et de Ressource hacker ?


cantador
0
Alberic81 Messages postés 13 Date d'inscription dimanche 10 septembre 2006 Statut Membre Dernière intervention 3 octobre 2011
29 sept. 2011 à 14:04
Ca y est j'ai trouvé !!

J'ai ajouté l'extansion du fichier :
FreeForm.LoadFromStream('AVION.3ds',Res);

et là, plus de message d'erreur!

Merci Cantador

(Delphi2009 et Resource Hacker 3.6.0.92)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 sept. 2011 à 14:26
de rien, je n'ai pas fait grand chose
juste catalyser ta réflexion..


cantador
0
Alberic81 Messages postés 13 Date d'inscription dimanche 10 septembre 2006 Statut Membre Dernière intervention 3 octobre 2011
30 sept. 2011 à 14:34
Après avoir réussi sans avoir d'erreur en partant du source de Delphicool, j'ai mis en application cette méthode dans mon Projet !

Tout fonctionne bien mais j'en reviens à mon problème 1er : le temps de chargement est long.
L'utilisation de fichier ressource a apporté de l'amélioration mais le gain de temps reste négligeable.

Connaissez-vous une autre méthode qui pourrait me faire gagner encore du temps ?

J'ai eu une autre idée :
Cette fiche n'étant créée que lorsque j'appui sur un bouton de ma fiche principale, J'ai essayé de faire le create de ma fiche3d en parallèle mais ma fiche principale bloque le temps du chargement !

Est-ce possible de faire le create de ma fiche3d en parallèle sans que ma fiche principale se bloque ?

Merci
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
30 sept. 2011 à 20:02
« Connaissez-vous une autre méthode qui pourrait me faire gagner encore du temps ? »

Bein non. Il faut bien que le chargement se fasse. C'est le problème de tous les jeux vidéo; il y a toujours un temps de latence au changement de niveau.

Par contre, dans ton cas, tu peux peut-être utiliser un artifice cosmétique. C'est-à-dire non pas réduire le temps de chargement, mais le faire de façon plus discrète dans l'événement Application.OnIdle. Ou dans un Thread.
Mais, perso, j'ai jamais essayé.

PS: Voir TIdleEvent et TApplicationEvents
0
Alberic81 Messages postés 13 Date d'inscription dimanche 10 septembre 2006 Statut Membre Dernière intervention 3 octobre 2011
3 oct. 2011 à 08:45
Merci pour ces précisions

Je vais me contenter des fichiers ressources pour le moment.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 oct. 2011 à 16:11
une petite barre de chargement dans un thread et hop..


cantador
0
Rejoignez-nous