Pages: [1]
  Print  
Author Topic: Fonction LUA pour attacher un matériau ?  (Read 785 times)
0 Members and 1 Guest are viewing this topic.
shadow
Moderator
Capo Regime
*****
Posts: 320



View Profile WWW
« on: August 14, 2008, 02: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:
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 ?
Logged

3D, photos panoramiques : http://www.shadows.fr
Steph3D
Administrator
Capo Regime
*****
Posts: 365



View Profile WWW
« Reply #1 on: August 14, 2008, 09:57:15 PM »

Je n’ai vraiment pas le temps de regarder le LUA la Sad 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 Wink
Logged

Steph
shadow
Moderator
Capo Regime
*****
Posts: 320



View Profile WWW
« Reply #2 on: August 14, 2008, 10:04:58 PM »

Bon, j'attends le retour de JegX dans ce cas...  mrgreen
Logged

3D, photos panoramiques : http://www.shadows.fr
JeGX
Global Moderator
Capo Bastone
*****
Posts: 1937



View Profile WWW
« Reply #3 on: August 20, 2008, 10:56:57 AM »

Quelque chose dans le genre:
Code:
HYP_Material.AttachTexture(material, texture, 0);
HYP_Object.SetMaterial(object, material);
te conviendrait?
HYP_Object.SetMaterial() correspond au au noeud xml attach_material.
Logged

shadow
Moderator
Capo Regime
*****
Posts: 320



View Profile WWW
« Reply #4 on: August 20, 2008, 11: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 ?)
Logged

3D, photos panoramiques : http://www.shadows.fr
JeGX
Global Moderator
Capo Bastone
*****
Posts: 1937



View Profile WWW
« Reply #5 on: August 20, 2008, 12:27:21 PM »

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:
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.
Logged

shadow
Moderator
Capo Regime
*****
Posts: 320



View Profile WWW
« Reply #6 on: August 20, 2008, 12:32:41 PM »

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
Logged

3D, photos panoramiques : http://www.shadows.fr
JeGX
Global Moderator
Capo Bastone
*****
Posts: 1937



View Profile WWW
« Reply #7 on: August 20, 2008, 12:41:25 PM »

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  Wink
Logged

shadow
Moderator
Capo Regime
*****
Posts: 320



View Profile WWW
« Reply #8 on: August 20, 2008, 01:36:10 PM »

Oui, au fond si tout le monde peut faire sa petite cuisine...  mrgreen
Logged

3D, photos panoramiques : http://www.shadows.fr
Pages: [1]
  Print  
 
Jump to: