le pré-chargement!!
autant je sais faire pour des acteurs, autant pour des textures et shaders, ben, humm, voilà quoi...
ce qu'il y à de compliqué (pour moi):
j'ai une scène 3D, mon portfolio, une sorte d'ardoise numérique
côté pile le menu, côté face, les vignettes.
le menu vient pré-chargé (les objets du menu et leurs textures ont étaient exportés depuis max)
les vignettes, par contre, sont chargées dynamiquement sur un mouseup.
dans le mouseup, je fais d'abord appel à une fonction qui me renvoi le nom de l'objet 3D sur lequel je viens de cliquer
et en fonction de son nom, j'appel une 2nd fonction qui elle charge les textures correspondantes, et finalement je fais tourner mon ardoise(3ème fonction).
l'ennui c'est que tout se passe au moment du clique, qu'il faut environ 2 secondes pour chargé les différentes textures, et qu'en suite je fais tourné mon ardoise pour affiché mes vignettes, et que mon ardoise se retourne elle en 1 seconde.
(déjà je pensais que l'animation de mon ardoise ne se déclencherais qu'après le chargement des textures: j'ai eu torts!)
j'ai fouillé sur les forum à la recherche de preload en "mode 3D", mais n'ai trouvé que très peut de réponses, si ce n'est que c'est assez compliqué à faire...
à ce stade là, et fonction de mes compétences, j'envisage 2 solutions (aucune des deux ne me satisfait vraiment...):
1ère soluce: j'utilise un timer dans le mouseup, entre le moment où je charge mes textures et le moment où je lance l'animation de mon ardoise
bon, au moins l'animation sera fluide, et je pourrais à la rigueur faire s'afficher un petit "chargement en cours..." pendant ce temps.
au moins mon portfolio restera dynamique et je pourrais assez facilement, par le suite, lui ajouter du contenu (sous forme de texture), voir même passé à du XML pour aller récupérer mes textures, titres et descriptions.
2ème soluce: ben je gère tout ça directement depuis max, là au niveau du "rendu final", je suis sur que tout ira bien, mais bon, c'est vraiment pas la solution vers laquelle je voulais me tourné (et que je me gardais en tête en dernier recours)
faut avouer que même si ça me rendrait bien service, c'est pas très dynamique comme solution...
et voilà (comment faire un long discours...)
et là je me tourne, une fois de plus, vers vous:
auriez vous une 3ème solution plus "élégante" à me proposé?
et pour info, voici le code utilisé pour ces différentes parties:
on mouseUp me
checkObject
if menu_Displayed = true then
if member("messages").text = "model(" & QUOTE & "3D" & QUOTE &")" then
--Load_Textures_3D
end if
if member("messages").text = "model(" & QUOTE & "Dessins" & QUOTE &")" then
--Load_Textures_Dessins
end if
if member("messages").text = "model(" & QUOTE & "Photos" & QUOTE &")" then
--Load_Textures_Photos
end if
if member("messages").text = "model(" & QUOTE & "Vidéo" & QUOTE &")" then
--Load_Textures_Video
end if
flip
menu_Displayed = false
else
show --ça c'est pour plus tard faire animer mes vignettes en direction de la caméra
end if
if member("messages").text = "model(" & QUOTE & "back2menu" & QUOTE &")" then
flipback
menu_Displayed = true
end if
end
je remplacerais à l'occasion le membre messages par une variable...
et voici les fonctions checkObject Load_Textures_3D et flip:
on checkObject
tOffset = point(sprite(1).left, sprite(1).top)
spriteToWorld = sprite(1).camera.spriteSpaceToWorldSpace(the mouseLoc - tOffset)
gModelsClicked = sprite(1).camera.modelUnderLoc((the mouseLoc - tOffset))
if gModelsClicked = VOID then
member("messages").text = ""
else
member("messages").text = gModelsClicked
end if
end
on Load_Textures_3D
lCount = castLib(2).member.count
lWorld = member(1)
repeat with inc = 1 to lCount
lTextureName = "3D_" & inc
textures_3D = lWorld.texture(lTextureName)
if voidp(textures_3D) then
textures_3D = lWorld.newTexture(lTextureName , #fromCastMember, castLib(2).member[inc])
end if
textures_3D.image = castLib(2).member[inc].image
lModel = lWorld.model("vignette_" & inc)
if voidp(lModel) then
-- put "oups"
else
lModel.shader.texture = textures_3D
end if
end repeat
end
on flip
member(1).model("ardoise").keyframeplayer.play("ardoise-Key", 0, 0, 825, 1)
member(1).model("3D").keyframeplayer.play("3D-Key", 0, 0, 825, 1)
member(1).model("Dessins").keyframeplayer.play("Dessins-Key", 0, 0, 825, 1)
member(1).model("Photos").keyframeplayer.play("Photos-Key", 0, 0, 825, 1)
member(1).model("Vidéo").keyframeplayer.play("Vidéo-Key", 0, 0, 825, 1)
member(1).model("back2menu").keyframeplayer.play("back2menu-Key", 0, 0, 825, 1)
repeat with inc = 1 to 16
member(1).model("Vignette_" & inc).keyframeplayer.play("Vignette_" & inc &"-Key", 0, 0, 825, 1)
end repeat
end
et ben avec tout ça, si il y en à qui ont lu jusqu'ici BRAVO!









