Hud texture mesh

Répondre
Partager Rechercher
Bonjour a tous

voila j'ai créer un mesh qui ce comporte de plusieurs partie et chaque partie plusieurs faces! jusque la tout va bien
je voudrais que l'on puisse changer les textures de certaines parties de ce mesh!

****
j'ai fait un petit script tout simple qui affect les bon objet et les bonne faces

mais je n’arrive pas a faire en sorte que cela ce trouve dans un HUD pour inter-agir avec le mesh- je voudrais que l'on puise uniquement changer les UUID dans le hud par la suite et en fait utiliser le HUD comme "injecteur de textures" et donc il devient comme un add-on pour le mesh!
j'aimerais que d'autre personne que moi puise y mètre leur UUID et rendre les sript no-mod pour éviter de faire connaitre leur textures et ainsi redistribuer a volonté le hud en add-on pour le mesh


pour le moment tout c que j'ai réussi a faire c cesi:
Citation :
default
{

touch_start(integer total_number) {

// set the texture
llSetLinkTexture(2,"a384acf6-8f68-e1fb-9c3d-fac24fe421dc",0);llSetLinkTexture(2, "c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e",1);llSetLinkTexture(2, "85b73f1a-cc4a-00e9-1edc-5379d823b10e",2);llSetLinkTexture(2, "85b73f1a-cc4a-00e9-1edc-5379d823b10e",3);llSetLinkTexture(3, "85b73f1a-cc4a-00e9-1edc-5379d823b10e",1);

}

}
je sais ce n'est pas grand chose mais je voudrais faire le plus simple possible afin que d'autre puis y mètre leur UUID sans trop ce perdre


je cherche donc a ce que ce script ou similaire ce trouve dans le hud mais je ne trouve pas comment faire la communication entre le hud et le mesh

merci pour votre aide éventuel
Hello et Oula.....
Ton hud ne peut pas être lié au mesh, puisque tu le portes...or, toutes les commandes avec "link" interressent des objets liés....
Dans ton cas.....le HUD contiendra un script qui communiquera, de preference sur un canal negatif , avec un script contenu dans le mesh, qui lui effectuera les taches de texturage.
Exemple simple de script du HUD..
Code PHP:

integer canal = -1234;
key texture = *********;
default
{
touch_start(integer total_number)
    {
         
llSay(canal,(string)texture);
    } 

coté mesh, un script va receptionner le message avec les données des textures, et les appliquer.....
Code PHP:

integer listen_handle;
 
default
{
    
state_entry()
    { 
        
listen_handle llListen(-1234""llGetOwner(), "");
    }
    
listeninteger canalstring namekey idstring message )
    {
     
llSetLinkTexture(2,message,0);
 
        
llListenRemove(listen_handle);
    }

Voila le principe de base...à adapter selon ton build.
non mon hud sera porté et non pas lié (je me suis mal exprimé) c’était au sens figuré ^^

bon j’essaye de bidouille ce que tu m'as donner, mais cela ne réagir pas
je fais peut être une erreur, au niveau de la définition (objet "message" ,face);

de plus sur: key texture =xxxxxxxxx; j'ai ajouter "" si non j'ai une erreur
j'ai donc mis: key texture ="a384acf6-8f68-e1fb-9c3d-fac24fe421dc"; c'est correct?
bon je reviens vers vous

voila ce que j'ai réussi a faire pour le moment

HUD:
Code PHP:

integer channel=-1234;  

default
{    
    
touch_start(integer tn)
    {
       
        
llSay(channel,"a384acf6-8f68-e1fb-9c3d-fac24fe421dc");  
         
// ICI IL ME FAUT PLUSIEURS  uuid
     
}


et pour le mesh:
Code PHP:

integer channel=-1234;

default
{
    
state_entry()
    {
        
llListen(channel,"",NULL_KEY,"");
    }

    
listen(integer channelstring namekey idstring msg)
    {   
       if (
llGetOwner() == llGetOwnerKey(id))
    
       { 
           
llSetTexture(llGetSubString(msg,0,-1),0);
           
llSetTexture(llGetSubString(msg,0,-1),1);
           
llSetTexture(llGetSubString(msg,0,-1),2);
           
llSetTexture(llGetSubString(msg,0,-1),3);
        }
    }

bon ça envois du coup la même texture sur mes différentes face
mon souci c que je doit envoyer différentes textures sur mes différentes faces
et la je block... une idee ? une solution?
tu peux passer une list de texture
exemple
Code PHP:

integer channel=-1234;  
list 
mestextures = ["xxxx-xxx","yyyy-yyyy",... ]; //etc .

default
{    
    
touch_start(integer tn)
    {
       
        
llSay(channel,llDumpList2String(mestextures,";"));  
         
// ICI IL ME FAUT PLUSIEURS  uuid
     
}


Code PHP:

integer channel=-1234;

list 
mestextures 
default
{
    
state_entry()
    {
        
llListen(channel,"",NULL_KEY,"");
    }

    
listen(integer channelstring namekey idstring msg)
    {   
        
integer i;
       if (
llGetOwner() == llGetOwnerKey(id))
    
       { 

           
mestextures llParseString2List(msg,[";"],[""]);
           for(
=0i<8;i++)
             
llSetTexture(llList2Key(mestextures,i),i);
           
        }
    }

ok ça marche nickel, il me reste juste un petite pétouille :-)
mon mesh est en 2 partie la première parti réagi impec sur les face voulus a savoir (les face 0/1/2/3) et sur la 2iemparti de mon mesh je dois attribué aussi une des textures sur une face 1 uniquement ! est ce que c possible?

partie1:
Texture1= face 0
Texture2= face 1
Texture3= face 3
Texture3= face 4

et sur ma parti 2:
Texture3= face 1

ça ce complique mais si j'arrive après c tout bon
donc comment atribuer la texture 3 a une face 1 sur un autre objet lier au mesh?

Dernière modification par ginger chevalier ; 30/03/2014 à 20h12.
essaye ca, (pas tester juste de tete)

Code PHP:

integer channel=-1234;

list 
mestextures 
default
{
    
state_entry()
    {
        
llListen(channel,"",NULL_KEY,"");
    }

    
listen(integer channelstring namekey idstring msg)
    {   
        
integer i;
       if (
llGetOwner() == llGetOwnerKey(id))
    
       { 

           
mestextures llParseString2List(msg,[";"],[""]);
// pour la texture prim liée ayant le N°1 en Numero de prim
llSetPrimitiveParams(1,["PRIM_TEXTURE",1,llList2Key(mestextures,2)]);

// pour ta prim root 
llSetPrimitiveParams(LINK_ROOT,["PRIM_TEXTURE",0,llList2Key(mestextures,0)]); //  TExture 1 sur face 0 
llSetPrimitiveParams(LINK_ROOT,["PRIM_TEXTURE",1,llList2Key(mestextures,1)]); //  TExture 2 sur face 1 
llSetPrimitiveParams(LINK_ROOT,["PRIM_TEXTURE",3,llList2Key(mestextures,2)]); //  TExture 3 sur face 3 
llSetPrimitiveParams(LINK_ROOT,["PRIM_TEXTURE",4,llList2Key(mestextures,2)]); //  TExture 3 sur face 4 
           
        
}
    }

(20,67) : error : function call mismatches type or number of arguments


et a propos mes textures ne sont pas sur le prim root
mon mesh est en deux parti attaché a un root prim qui lui sera invisible
ce qui me donne: prim root sans texture, partie mesh 1 = 4 textures, et partie mesh 2 = une texture

Dernière modification par ginger chevalier ; 31/03/2014 à 09h57.
Code PHP:

llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",0,llList2Key(mestextures,0),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 1 sur face 0 
llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",1,llList2Key(mestextures,1),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 2 sur face 1 
llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",3,llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 3 sur face 3 
llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",4,llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 3 sur face 4
llSetLinkPrimitiveParamsFast(3,["PRIM_TEXTURE",1,llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); 
faut juste éventuellement inverser les 2 et le 3 en début de parenthèse selon les linknumbers des parties liées...
bon hier cela fonctionner et aujourd'hui plus rien ne réagit
donc je résume ma situation:

j'ai un "Hud" qui va me servir pour "injecter mes textures
qui comporte ce script:
Code PHP:

//Script for texture Hud
integer channel=-1234
 
list 
mestextures = [


"a384acf6-8f68-e1fb-9c3d-fac24fe421dc",//Upp texture 1 uuid
"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e",//top texture  2 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e",//Low texture 3 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e"//Low texture  3 uuid
];


default
{    
    
touch_start(integer tn)
    {

       
llSay(channel,llDumpList2String(mestextures,";"));
        
         
     }


j'ai de l'autre coté mon mesh qui ce compose,
d'un root-prim et de deux partie de mesh

Le mesh:
partie 1, ce nome 12 et a 7 faces dont je ne veux affecter que 4 "face 0-1-2-3) (la face 2 et 3 on la meme texture.
Partie 2, ce nome 13 et a 2 faces donc je je ne veux affecter qu’une seule "la face 1) et doit porter la même texture que la face 2 et 3 dans la parti 1 "nommé 12"

le root prim qui doit porter les script pour affecter le mesh (coupé 12-13)
porte ce script:
Code PHP:

//Script for texture recepteur  
integer channel=-1234;

list 
mestextures 
default
{
    
state_entry()
    {
        
llListen(channel,"",NULL_KEY,"");
    }

    
listen(integer channelstring namekey idstring msg)
    {   
        
integer i;
       if (
llGetOwner() == llGetOwnerKey(id))
    
       { 

           
mestextures llParseString2List(msg,[";"],[""]);
           
llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",0,llList2Key(mestextures,0),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 1 sur face 0 
llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",1,llList2Key(mestextures,1),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 2 sur face 1 
llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",3,llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 3 sur face 3 
llSetLinkPrimitiveParamsFast(2,["PRIM_TEXTURE",4,llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]); //  TExture 3 sur face 4
llSetLinkPrimitiveParamsFast(3,["PRIM_TEXTURE",1,llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]);  
           
        }
    }


et au final j’obtiens ceci dans la fenêtre de sript error: llSetPrimitiveParams error running rule #1: non-integer rule.

Dernière modification par ginger chevalier ; 31/03/2014 à 12h51.
PRIM_TEXTURE est une constante et est un integer .
Tu renseignes llSetLinkPrimitiveParamsFast par une chaine de charactères , une string qui est notée entre guillemets
Code PHP:

llSetLinkPrimitiveParamsFast(2,
// Texture 0 sur Prim 2 , Face 0 
[PRIM_LINK_TARGET PRIM_TEXTURE ,0,llList2Key(mestextures,0),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]
// Texture 1 sur Prim 2 , Face 1
[PRIM_LINK_TARGET PRIM_TEXTURE ,llList2Key(mestextures,1),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]
// Texture 2 sur Prim 2 , Face 3
PRIM_LINK_TARGET2PRIM_TEXTURE  3llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]
// Texture 2 sur Prim 2 , Face 4
PRIM_LINK_TARGET2PRIM_TEXTURE llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0]
// Texture 2 sur Prim 3 , Face 1
PRIM_LINK_TARGET3PRIM_TEXTURE ,llList2Key(mestextures,2),<1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0 ]
); 

On peut aussi facilitéer le numéro de prim en aménageant ton code pour qu il retrouve le numéro de prim à partir de son nom.
C est plus facile quand tu as des objets que tu lies , délies souvent

Dernière modification par redpurple ; 31/03/2014 à 13h27.
question supplémentaire si je peux abuser de votre bienveillance et des vos connaissances.

serait 'il possible de lié les script "hud" a des boutons et donc définir chaque "paré de texture a un bouton différent?

Exemple:

Code PHP:

//Script for texture Hud
integer channel=-1234
 
list 
mestextures = [


//BOUTON A
"a384acf6-8f68-e1fb-9c3d-fac24fe421dc",//Upp texture 1 uuid
"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e",//top texture  2 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e",//Low texture 3 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e"//Low texture  3 uuid
];


//BOUTON B
"a384acf6-8f68-e1fb-9c3d-fac24fe421dc",//Upp texture 1 uuid
"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e",//top texture  2 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e",//Low texture 3 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e"//Low texture  3 uuid
];

default
{    
    
touch_start(integer tn)
    {

       
llSay(channel,llDumpList2String(mestextures,";"));
        
         
     }


Code PHP:

list mestextures = [
 
 
//BOUTON A
"a384acf6-8f68-e1fb-9c3d-fac24fe421dc",//Upp texture 1 uuid
"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e",//top texture  2 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e",//Low texture 3 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e"//Low texture  3 uuid
];
 
 
//BOUTON B
"a384acf6-8f68-e1fb-9c3d-fac24fe421dc",//Upp texture 1 uuid
"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e",//top texture  2 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e",//Low texture 3 uuid
"85b73f1a-cc4a-00e9-1edc-5379d823b10e"//Low texture  3 uuid
];
 
 
list 
mestextures =["a384acf6-8f68-e1fb-9c3d-fac24fe421dc",......];
list 
mestextures2=["a384acf6-8f68-e1fb-9c3d-fac24fe421dc",.......];
default
{    
    
touch_start(integer tn)
    {
if (
llDetectedTouchFace(0)==   Numero de face du bouton)
 
       
llSay(channel,llDumpList2String(mestextures,";"));
 
else if(
llDetectedTouchFace(0)==   Numero de face du bouton2)
 
    
llSay(channel,llDumpList2String(mestextures2,";"));
 
 
     }
 

si le hud est un mesh par exemple, ou les boutons, les faces d' un même prim...Sinon, même principe faisable avec les linknumbers des boutons...
J en profite pour donner un exemple avec les (pas si ) récentes fonctions JSON.

Pour le HUD
Code PHP:

//Script for texture Hud
integer channel=-1234
 


string config =
"
{
\"Bouton1\" : 
[
   {
    \"nomTexture\" : \"a384acf6-8f68-e1fb-9c3d-fac24fe421dc\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 0
   },
   {
    \"nomTexture\" : \"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 1
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 3
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 4
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie2\",
    \"numeroFace\" : 1
   }
],
\"Bouton2\" : 
[
   {
    \"nomTexture\" : \"a384acf6-8f68-e1fb-9c3d-fac24fe421dc\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 0
   },
   {
    \"nomTexture\" : \"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 1
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 3
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 4
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie2\",
    \"numeroFace\" : 1
   }
],
\"Bouton3\" : 
[
   {
    \"nomTexture\" : \"a384acf6-8f68-e1fb-9c3d-fac24fe421dc\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 0
   },
   {
    \"nomTexture\" : \"c8cf0c25-ea27-c6d7-3a34-5a3ca1219c2e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 1
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 3
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie1\",
    \"numeroFace\" : 4
   },
   {
    \"nomTexture\" : \"85b73f1a-cc4a-00e9-1edc-5379d823b10e\",
    \"nomPrim\" : \"Partie2\",
    \"numeroFace\" : 1
   }
]
}
"
;

default
{    
    
touch_end(integer tn)
    {
        
string nameButton llGetLinkName(llDetectedLinkNumber(0));
        
string json llJsonGetValue(config, [ nameButton ] );
        
llSay(channeljson); 
     }



Pour l objet qui recoit

Code PHP:

integer channel=-1234;


integer getLinkWithName(string name) {
    
integer i 2;  
    
integer x llGetNumberOfPrims()  ; 
    for (; 
<= x; ++i)
    {
        if ( 
llToUpper(llGetLinkName(i)) == llToUpper(name)) 
        {
            return 
i;
        } 
    }
    
llOwnerSay("LinkName " name " Not Found");
    return -
10
}

default
{
    
state_entry()
    {
        
llListen(channel,"","","");
    }

    
listen(integer channelstring namekey idstring msg)
  {          
       if (
llGetOwner() == llGetOwnerKey(id))
    
       { 
                
integer i;
                list 
params;
                while (  
llJsonValueType(msg, [  i"nomTexture" ] ) == JSON_STRING 
                {
                    
string nomTexture =  llJsonGetValue(msg, [  i"nomTexture" ] );
                    
string nomPrim =  llJsonGetValue(msg, [  i"nomPrim" ] );
                    
string numeroFace =  llJsonGetValue(msg, [  i"numeroFace" ] );
                           
                    
params += [ 
                        
PRIM_LINK_TARGETgetLinkWithName(nomPrim), 
                        
PRIM_TEXTURE, (integer)numeroFacenomTexture
                         <
1.0,1.0,0.0>, <0.0,0.0,0.0>, 0.0] ;
                    
i++; 
                }        
                
llSetLinkPrimitiveParamsFast(2params);    

           
        }
    }

A rajouter les messages d erreur pour textures non trouvées , face non trouvée .. etc ..


Là dans la configuration de la chaine JSON, on a une structure aboresente .
Les noeuds supérieurs sont les noms des boutons ( Bouton1 Bouton1 etc ... ) , en fait des prims qu on touche sur le hud
Les noeuds inférieurs donne un tableau d objets qui ont le mémé format
"nomTexture" suivi du nom de la texture
"nomPrim" suivi de nom de la prim qui recoir la texture
"numeroFace" suivi du numéro de la face qui recoit la texture
Tous les champs ont l avantage d être nommés pour pouvoir mieux relire la chaine JSON dans l avenir

C est plus à titre d exemple et de présentation de JSOn que je le fais .
Les fonctions sont dans
http://wiki.secondlife.com/wiki/Json_usage_in_LSL
http://wiki.secondlife.com/wiki/LlList2Json
http://wiki.secondlife.com/wiki/LlJson2List
http://wiki.secondlife.com/wiki/LlJsonGetValue
http://wiki.secondlife.com/wiki/LlJsonSetValue
http://wiki.secondlife.com/wiki/LlJsonValueType

Dernière modification par redpurple ; 31/03/2014 à 15h24.
re bonjour a tous
j'ai réussi a tout faire comme il faut et cela fonctionne parfaitement
par contre mon script de la parti hud sera modif pour que d'autre puis l'utiliser pour "injecter" leur textures et par la suit le rendre no-modif et le vendre ou le donner !
ma question est donc la suivente est'il possible de rendre le canal Chanel invisible d'une manière ou d'une autre? et ainsi éviter toute "bidouille de celui si pour éventuellement récupéré par la suite le contenu du script devenu no-modif

et'il par exemple possible de mètre la lecture du canal sur un 2iem script qui lui sera no modif d’entrée de jeux et donc que le 1ier scrip pour connaitre son canal soit renvoyer vers celui si!

Dernière modification par ginger chevalier ; 09/04/2014 à 13h31.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés