Forums Développement Multimédia

Aller au contenu

changer de texture

Director

7 réponses à ce sujet

#1 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 28 March 2010 - 15:09 PM

bonjour,
voilà j'essaye de changer la texture d'un objet d'une scène 3Dprovenant de 3DS MAX et importée sous director sous forme de fichier
shockwave.

dans le tutorial "Débuter avec Shockwave 3D" du site, j'ai découvert quelques lignes de code qui m'intéressent:


on addTextures me
 
  -- Création des shaders différents --
  tShaderSol = pWorld.newshader("sol", #standard)

  -- Modifions certaines propriétés --
  tShaderSol.shininess = 0
 
  -- Applique les shaders --
  pWorld.model("sol").shader = tShaderSol
 
  -- Création des textures --
  tTextureSol = pWorld.newtexture("sol", #fromCastMember, member("sol"))
 
  -- Applique les textures --
  tShaderSol.texture = tTextureSol
 
end
 

pour essayer d'adapter ce code à ma scène, voici ce que j'essaye de faire:


  -- Création des shaders différents --
  tShaderSol = scene.newShader("ecran", #standard)
 
  -- Modifions certaines propriétés --
  tShaderSol.shininess = 100
 
  tShaderSol.specular = rgb(255,255,255)
 
  -- Applique les shaders --
  scene.model("ecran").shader = tShaderSol
 
  -- Création des textures --
  tTextureSol = scene.newTexture("ecran", #fromCastMember, member("illus"))
 
  -- Applique les textures --
  tShaderSol.texture = tTextureSol
 

"scene" correspond au nom d'acteur de ma scène 3D importé dans director (format shockwave)
et
"ecran" correspond à mon objet ecran de la scène 3D.
enfin
"illus" correspond au nom de ma texture dans la distribution.

mais ce code ne fonctionne pas et me renvoi systématiquement un: "object expected"


est-ce que quelqu'un pourrait me guider ?
c'est tout ce qui me reste à savoir, pour le moment, pour réussir ma petite interface 3D...

#2 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 28 March 2010 - 17:24 PM

Hello elran,

Sais-tu à quel endroit le "object expected" survient ?

A mon avis le problème vient de ta scene.
En effet, dans ta ligne "scene.newShader("ecran", #standard)", scene ne doit pas correspondre au nom de ton fichier w3d mais est une variable, comme l'était pWorld dans le tuto, renvoyant à la référence de l'acteur w3d.

Bref, si tu veux utiliser "scene" comme variable, tu dois la déclarer en variable de propriété et l'initialiser telle que scene = member("scene")

En vitesse :

property scene

on new me

   scene = member("scene")

   [...]

end

on addTextures me

  -- Création des shaders différents --
  tShaderSol = scene.newShader("ecran", #standard)
 
  -- Modifions certaines propriétés --
  tShaderSol.shininess = 100
 
  tShaderSol.specular = rgb(255,255,255)
 
  -- Applique les shaders --
  scene.model("ecran").shader = tShaderSol
 
  -- Création des textures --
  tTextureSol = scene.newTexture("ecran", #fromCastMember, member("illus"))
 
  -- Applique les textures --
  tShaderSol.texture = tTextureSol

end
 


#3 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 28 March 2010 - 19:59 PM

Salut,
et merci de ta réponse.
je sentais bien qu'il y avait un truc qui m'échappé à ce niveau là, et c'est sur la première ligne que j'avais le message.
du reste, c'est toujours sur la première ligne (même après ajout du code que tu m'as fourni) que j'ai ce message:


  tShaderSol = scene.newShader("ecran", #standard)
 

si j'ai bien compris, là, tShaderSol est une variable, et le fait de l'initialiser vaut pour une déclaration de variable?
(le typage doit se faire automatiquement?)

#4 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 28 March 2010 - 21:19 PM

bon, en suivant ton raisonnement, j'ai réussi!

je me permet de mettre le code ici, si jamais il était possible que tu ou quelqu'un d'autres vérifie qu'il n'y à pas d'abérations:

je pense notamment au fait que j'ai du déclarer plusieurs variables (Texture_3D, Texture_Dessins, Texture_Photos, Texture_Video)
en variable global, et je m'interroge sur ce point...?


global gModelsClicked, menu_Activated, Texture_3D, Texture_Dessins, Texture_Photos, Texture_Video

on startMovie
  menu_activated = 1
  Prepare_Textures
  put(member("scene").model("ecran").shader)
  put(member("scene").model("ecran").shader.texture)
end

on Prepare_Textures me
  Texture_3D =  member("scene").newTexture("illus_3D", #fromCastMember, member("illus_3D"))
  Texture_Dessins =  member("scene").newTexture("illus_dessins", #fromCastMember, member("illus_dessins"))
  Texture_Photos =  member("scene").newTexture("illus_photos", #fromCastMember, member("illus_photos"))
  Texture_Video =  member("scene").newTexture("illus_video", #fromCastMember, member("illus_video"))
end

on flip
 
  if menu_Activated = 1 then
    if member("messages").text = "model(" & QUOTE & "3D" & QUOTE &")" then  
      member("scene").model("ecran").shader.texture = Texture_3D
    end if
    if member("messages").text = "model(" & QUOTE & "Dessins" & QUOTE &")" then  
      member("scene").model("ecran").shader.texture = Texture_Dessins
    end if
    if member("messages").text = "model(" & QUOTE & "Photos" & QUOTE &")" then  
      member("scene").model("ecran").shader.texture = Texture_Photos
    end if
    if member("messages").text = "model(" & QUOTE & "Vidéo" & QUOTE &")" then  
      member("scene").model("ecran").shader.texture = Texture_Video
    end if
   
    member("scene").model("ardoise").keyframeplayer.play("ardoise-Key", 0, 0, 825, 1)
    member("scene").model("3D").keyframeplayer.play("3D-Key", 0, 0, 825, 1)
    member("scene").model("Dessins").keyframeplayer.play("Dessins-Key", 0, 0, 825, 1)
    member("scene").model("Photos").keyframeplayer.play("Photos-Key", 0, 0, 825, 1)
    member("scene").model("Vidéo").keyframeplayer.play("Vidéo-Key", 0, 0, 825, 1)
    member("scene").model("ecran").keyframeplayer.play("ecran-Key", 0, 0, 825, 1)
   
    menu_activated = 0
   
    put(member("scene").model("ecran").shader)
    put(member("scene").model("ecran").shader.texture)
   
  else
   
    if member("messages").text = "model(" & QUOTE & "ecran" & QUOTE &")" then
      member("scene").model("ardoise").keyframeplayer.play("ardoise-Key", 0, 825, 1650, 1)
      member("scene").model("3D").keyframeplayer.play("3D-Key", 0, 825, 1650, 1)
      member("scene").model("Dessins").keyframeplayer.play("Dessins-Key", 0, 825, 1650, 1)
      member("scene").model("Photos").keyframeplayer.play("Photos-Key", 0, 825, 1650, 1)
      member("scene").model("Vidéo").keyframeplayer.play("Vidéo-Key", 0, 825, 1650, 1)
      member("scene").model("ecran").keyframeplayer.play("ecran-Key", 0, 825, 1650, 1)
      menu_activated = 1      
    end if
   
  end if
 
end
 

par contre, après avoir assigner une texture à mon objet, j'imagine que comme dans un éditeur 3D il me faut faire le mapping?
car là le résultat est un peut surprenant, suivre ce lien pour voir ça:

Le lien

en gros ma texture s'affiche 5 fois sur mon objet:
1 fois en grand (s'étale sur toute la surface de l'objet comme on aurait pu s'y attendre)(euh non, en faite elle dépasse même de l'objet)
et 4 fois, en plus petit, au beau milieu de mon objet...

mapping obliger? ça me fait un peut peur...

je n'ai entamé la 3D sur director que depuis vendredi soir, en découvrant ce site, et les tutaux d'Adobe...
ça fait beaucoup à ingurgité en si peut de temps... ;)

#5 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 29 March 2010 - 10:44 AM

Salut elran,

Pour commencer je te conseille d'utiliser une variable globale gScene pour remplacer toutes tes références à member("scene"), ça sera plus facile à lire et ça ira plus vite.

Ensuite, ton problème de texture me semble venir du shader.
Comment as-tu créé ton écran 3D (3DSMax ?) ?
Vérifie que tu n'as pas déjà un problème avant l'export.
On dirait que la texture est appliquée à deux objets qui ont le même shader mais pas le même mapping.

Si tu ne trouves pas, la solution serait peut-être de créer un nouveau shader...

#6 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 29 March 2010 - 11:39 AM

ok, je prends note, ça s'affiché "normalement" sous 3DS max, sous entendu ça prenait tout la taille de "ecran".

ceci dit j'en suis maintenant à remplacer mon objet écran par 16 objets "vignettes", j'espère que ça va faire sauter ce problème...
(j'ai totalement supprimé "ecran" dans 3DS max)

ok pour la variable global, juste qu'en général j'aime pas trop déclarer des variables qui ne me servent à rien (ou précisément juste pour faciliter la lecture du code: donc auxquels je ne fais jamais "appel"), mais c'est pas non plus comme si j'en avais fait un usage intensif ;)

oui sinon, l'écran à bien était créé sur 3ds max, comme le reste de ma scène, mais pour le fun je vais tout de même m'essayer à l'animation via Director... ex: les vignettes, je vais les faire se rapproché de la cam, pour un agrandissement, et avec le code, ça sera plus souple à faire: notamment l'enregistrement auto du point de départ dans des variables pour y retourné (après agrandissement) pis ça plaira au prof que je n'ai pas tout fait depuis 3ds max... ;)

et oui ceci est un devoir que je dois rendre jeudi ;)

oui parce normalement, dans l'export de ma scène 3D, je récupère également mon mapping, c'est bien ça?

bon merci pour ton aide en tous cas! les ressources sur Director sur le web sont peut nombreuses... :(

#7 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 29 March 2010 - 18:20 PM

Voir le messageelran, le 29 March 2010 - 11:39 AM, dit :

ok pour la variable global, juste qu'en général j'aime pas trop déclarer des variables qui ne me servent à rien (ou précisément juste pour faciliter la lecture du code: donc auxquels je ne fais jamais "appel"), mais c'est pas non plus comme si j'en avais fait un usage intensif ;)
Oui, mais ce n'est pas qu'une histoire de lisibilité, ton code s'exécutera aussi plus rapidement (et c'est toujours bon à prendre).
Si tu ne veux absolument pas d'une variable global, tu pourrais déclarer une variable temporaire tScene au début de ta fonction flip.

Voir le messageelran, le 29 March 2010 - 11:39 AM, dit :

oui parce normalement, dans l'export de ma scène 3D, je récupère également mon mapping, c'est bien ça?
Exact (et 3DSMax est indispensable pour le dépliage d'UV d'un personnage par exemple), il y avait quelque part un article sur tout ce qui passait ou non de 3DSMax à W3D, un peu de recherche te permettra sans doute de le retrouver.

#8 elran

    Ceinture Orange

  • Members
  • PipPipPip
  • 31 messages

Posté 29 March 2010 - 19:52 PM

ok, merci à toi pour tes éclaircissements ;)

je vais m'y tenir (var global scene...), pour être honnête je ne pensais pas que ça puisse faire que le code s'exécute plus rapidement, même si, faut bien reconnaitre que ça fait aussi moins de code...

Voir le messageglurp, le 29 March 2010 - 18:20 PM, dit :

Exact (et 3DSMax est indispensable pour le dépliage d'UV d'un personnage par exemple), il y avait quelque part un article sur tout ce qui passait ou non de 3DSMax à W3D, un peu de recherche te permettra sans doute de le retrouver.

ok, dès que j'en aurais le temps, je me plongerais plus dans le sujet...

encore un grand merci pour toutes tes réponses!



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP