Author Topic: Fonction LUA pour attacher un matériau ?  (Read 3931 times)

0 Members and 1 Guest are viewing this topic.

shadow

  • Capo Regime
  • ***
  • Posts: 353
Fonction LUA pour attacher un matériau ?
« on: August 14, 2008, 01:01:14 PM »
Avec Demoniak, un objet 3D chargé depuis un obj ou un 3ds est un "model", composé de sous objets de type mesh.

L'attribution de matériaux ne se fait que sur des meshes, et il faut connaître leurs noms, ce qui n'est pas toujours le cas (que ce soit par oubli ou parce que l'appli de création du modèle lui en attribue un sans demander quoi que ce soit à l'utilisateur).

Mon problème :
je me trouve donc avec des modèles comportant en général un seul mesh, mais dont je ne connais pas le nom. Pas pratique pour leur attribuer un matériau.

Du coup j'essaie de coder en LUA quelques lignes qui parcourraient les meshes d'un modèle et attribueraient à tous le même matériau.
Le début :
Code: [Select]
local mesh_id = HYP_Model.GetFirstSubMesh( "monmodele" );Et là... je cherche une fonction LUA qui correspondrait au noeud xml attach_material, mais rien... pas moyen de toucher au matériau d'un mesh en LUA ?  :shock:

Est-ce que j'ai mal lu la doc ?
3D, photos panoramiques : http://www.shadows.fr

Steph3D

  • Capo Regime
  • ***
  • Posts: 399
Re: Fonction LUA pour attacher un matériau ?
« Reply #1 on: August 14, 2008, 08:57:15 PM »
Je n’ai vraiment pas le temps de regarder le LUA la :( mais j'ai aussi parfois remarqué que des options du XML n'étaient pas accessibles. Donc à défaut de faire avancer les choses, je dirais qu'un oubli n'est pas improbable ;)

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Fonction LUA pour attacher un matériau ?
« Reply #2 on: August 14, 2008, 09:04:58 PM »
Bon, j'attends le retour de JegX dans ce cas...  :mrgreen:
3D, photos panoramiques : http://www.shadows.fr

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2343
    • oZone3D.Net
Re: Fonction LUA pour attacher un matériau ?
« Reply #3 on: August 20, 2008, 09:56:57 AM »
Quelque chose dans le genre:
Code: [Select]
HYP_Material.AttachTexture(material, texture, 0);
HYP_Object.SetMaterial(object, material);
te conviendrait?
HYP_Object.SetMaterial() correspond au au noeud xml attach_material.

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Fonction LUA pour attacher un matériau ?
« Reply #4 on: August 20, 2008, 10:10:19 AM »
Quote
HYP_Object.SetMaterial()
HYP_Object.SetMaterial() plutôt que HYP_Mesh.SetMaterial() ? Cela pourrait donc aussi s'appliquer aux models ? (object, ça inclut meshes et models, il me semble ?)
3D, photos panoramiques : http://www.shadows.fr

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2343
    • oZone3D.Net
Re: Fonction LUA pour attacher un matériau ?
« Reply #5 on: August 20, 2008, 11:27:21 AM »
HYP_Object.SetMaterial() est valable sur tout type d'objet. Mais sur les modèles, ca ne fait rien pour le moment car le modèle n'a pas de materiau. Et dans le cas général, ca peut etre dangereux d'appliquer un materiau sur tous les sous meshes.

Mais voila une petite fonction qui fait ce travail (à utiliser à tes risques et perils):
Code: [Select]
function DEM_ApplyMaterialOnAllSubMeshes(parent, material)
local num_children = HYP_Object.GetNumChildren(parent);
local i=0;
while (i<num_children) do
child = HYP_Object.GetChildByIndex(parent, i);
if (HYP_Object.IsTypeOf(child, "O3_OBJECT_TYPE_MESH" )) then
    HYP_Object.SetMaterial(child, material);
end
DEM_ApplyMaterialOnAllSubMeshes(child, material);
i = i + 1; -- next child
end
end
Cette fonction sera dispo dans la nouvelle version de DemAux.

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Fonction LUA pour attacher un matériau ?
« Reply #6 on: August 20, 2008, 11:32:41 AM »
Quote
Et dans le cas général, ca peut etre dangereux d'appliquer un materiau sur tous les sous meshes.
Dans quel cas ça peut poser des problèmes ?

Quote
Mais voila une petite fonction qui fait ce travail (à utiliser à tes risques et perils):
Génial, je connaissais pas HYP_Object.GetNumChildren(parent);
Du coup je vais enfin pouvoir mélanger meshes et modèles.  :transpi:
3D, photos panoramiques : http://www.shadows.fr

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2343
    • oZone3D.Net
Re: Fonction LUA pour attacher un matériau ?
« Reply #7 on: August 20, 2008, 11:41:25 AM »
tout simplement dans le cas ou les sous meshes sont tous constitués de materiaux différents. Ce cas se presente très frequement. Mais bon comme il y a toutes les fonctions necessaires en LUA, chacun finit par y trouver son compte  ;)

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Fonction LUA pour attacher un matériau ?
« Reply #8 on: August 20, 2008, 12:36:10 PM »
Oui, au fond si tout le monde peut faire sa petite cuisine...  :mrgreen:
3D, photos panoramiques : http://www.shadows.fr