Glscene retrecir

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 16 févr. 2006 à 21:18
DCA_BIGBOSS Messages postés 5 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 28 mai 2006 - 27 mai 2006 à 18:59
Salut ,

bon y a t-il moyen de diminuer ce code pu***

tremplin2.Material.Texture.Image.LoadFromFile('tremplin.bmp');
tremplin3.Material.Texture.Image.LoadFromFile('tremplin.bmp');
tremplin4.Material.Texture.Image.LoadFromFile('tremplin.bmp');
tremplin5.Material.Texture.Image.LoadFromFile('tremplin.bmp');
tremplin6.Material.Texture.Image.LoadFromFile('tremplin.bmp');
tremplin7.Material.Texture.Image.LoadFromFile('tremplin.bmp');
tremplin8.Material.Texture.Image.LoadFromFile('tremplin.bmp');
tremplin9.Material.Texture.Image.LoadFromFile('tremplin.bmp');

et pour ceci

tremplin9.Position.x:= 5;
tremplin9.Position.y:= 50;
tremplin9.Position.z:= -5;

n' y a t-i l pas moyen d'en faire 1 seule ligne genre

Tremplin9.position:= (5,50,-5) // ceci ne marche pas mais qu'est ce que j'aimerais pourtant ...

Merci Beaucoup
Ciao

7 réponses

flor003 Messages postés 118 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 19 juin 2007
17 févr. 2006 à 10:13
salut
je vois pas pourquoi tu voudrais reduire le code.
sinon tu fais un for 1 to 9 do mais franchement tu vas pratiquement rien gagner.
a+
0
vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
17 févr. 2006 à 10:42
A toi de développer ton composant héritant de GLSCENE et tes methodes pour arriver à ton but !!!

vaughan
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
17 févr. 2006 à 16:36
@flor003
"salut
je vois pas pourquoi tu voudrais reduire le code."

Ben tt simplement parce que imagine que je n'ai pas 9 object mais en realite une 40taine, ce qui fait 40 lignes de codes a dire presque la meme chose et pour ton idee de la boucle franchement je vois pas comment faire , j'ai essaye et rien de concluant mais si tu sais ... C'est excellent

@Vaughan

Bon ca j'pense que c'est pas trop de mon niveau , dsl

Ciao et Merci
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
17 févr. 2006 à 22:39
pour les texture utilise une GLMaterialsLibrary.

Créer les materiaux dans la librairie (sans loader les texture en mode conception)
Link la avec les objets de ta scene, propriétée "Material.MaterialLibrary" (composant) et "Material.LibMaterialName" (nom de la texture dans la librairie)

ensuite fait comme cela :

petite procedure utile :

procedure AssignMaterial(var AMMatLib : TGLMaterialLibrary; const AMIndex : integer; const ATexDir,AMMatName : string);
begin
AMMatLib.Materials[AMIndex].Material.Texture.Image.LoadFromFile(ATexDir+AMMatName);
end;

utilisation :

begin
AssignMaterial(MatsLib,1,'d:\textures\','texture1.jpg');
AssignMaterial(MatsLib,2,'d:\textures\','texture2.jpg');
AssignMaterial(MatsLib,3,'d:\textures\','texture3.jpg');
end;



ou

var x : integer;
begin
For x := 1 to 3 do
AssignMaterial(MatsLib,x,'d:\textures\','texture'+IntToStr(x)+'.jpg');
end;

et enfin pour les positions, je te recommendre plutot de faire :

Object.Position.SetPoint(5,50,-5);

regarde mes tutos sur GLScene dans les codes sources

<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
0

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

Posez votre question
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
17 févr. 2006 à 23:17
f0xi tu es .. tu es ... tu es .. un dieu !!!! Et encore je pese mes mots !

Allez je vais regarder a tt ca mais normalement ya pas de prob

Merci , Merci et encore

Deja cette ligne Object.Position.SetPoint(5,50,-5); me fait gagner plus ou moins 100 lignes !!!

et ca
var x : integer;
begin
For x := 1 to 3 do
AssignMaterial(MatsLib,x,'d:\textures\','texture'+IntToStr(x)+'.jpg');
end;

ben imagine meme pas a mon avis , vaut mieux !!!

RE ,
Ciao
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
19 févr. 2006 à 11:30
oh non, je suis loin d'etre un dieu ... mais tu as raison ... je suis un bon ... XD

tu peu meme faire un loading :

var x,y : integer;
begin
y := 0;
ProgressBar1.min := 0;
ProgressBar1.max := 55;
LoadLabel.Caption := 'Chargement des textures...';
For x := 1 to 55 do begin
AssignMaterial(MatsLib,x,'d:\textures\','texture'+IntToStr(x)+'.jpg');
Progressbar1.position := x;
if y = 5 then begin
y := 0;
LoadLabel.visible := not LoadLabel.visible;
Application.ProcessMessage;
end;
inc(y);
end;
end;

<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
0
DCA_BIGBOSS Messages postés 5 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 28 mai 2006
27 mai 2006 à 18:59
MDR le label qui clignote pendant le chargement :D (ou alors j'ai mal compris).

Je voudrais savoir s'il y a moyen d'accélérer le chargement? parce que je refais le jeu de société HOTEL sur ordi. J'ai scanné la carte et les autres éléments, mais rien que pour charger la carte (un jpg de 1446x1454 qui fais 473 Ko) ça prend pas mal de temps. J'aimerais ne pas perdre de résolution!

Merci d'avance
0
Rejoignez-nous