Ce script transforme une prim boîte standard en un panneau plat à 5 faces ; il utilise la fonction llSetPrimitiveParams avec des paramètres spécifiques.


 

//From an original idea of Johanna Hyacinth (see profile in world and her web site : http://johannahyacinth.blogspot.com but modelized with a script by Garmin Kawaguichi.

//Données globales
//La largeur et la hauteur vont permettre de calculer les proportions des faces
//La largeur des images affichées sur une face (en pixels par exemple)
integer imgWidth = 640;

//La hauteur des images affichées sur une face (en pixels par exemple)
integer imgHeight = 480;

//La hauteur de l'afficheur
float fscreenHeight = 1.0;
default
{
state_entry()
{
llSetPrimitiveParams([PRIM_TYPE, PRIM_TYPE_PRISM, 0, <0.2, 0.8, 0.0>, 0.65, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>, PRIM_SIZE, <0.01, (((float)imgWidth / (float)imgHeight) * 6.0 * fscreenHeight), fscreenHeight>]);
//1.- PRIM_TYPE, PRIM_TYPE_PRISM, 0, <0.2, 0.8, 0.0>, 0.65, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0> : un prisme avec Path Cut B = 0.2 et E = 0.8 ; Hollow à 65 ; Taper X et Y = 0 ; Size X et Y = 1.0

//2. - PRIM_SIZE, <0.01, ((float)imgWidth / (float)imgHeight) * 6.0, 1.0> : la taille de la prim est forcée à X = 0.01, Y = Z * 6 * (largeur de l'image / hauteur de l'image), Z = hauteur de la ligne d'écrans ; mais tenez compte que Y et/ou Z sont limité à 10 mmètres, si le rapport entre largeur et hauteur est de 1.333333 (cas d'une image en 640x480), la valeur maximum pour Z est de 1.25

llSetPrimitiveParams([PRIM_TEXTURE, 3, "5748decc-f629-461c-9a36-a35a221fe21f", <2.5, 1.0, 0.0>, <-0.25, 0.0, 0.0>, 0.0, PRIM_TEXTURE, 7, "5748decc-f629-461c-9a36-a35a221fe21f", <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>, 0.0, PRIM_TEXTURE, 4, "5748decc-f629-461c-9a36-a35a221fe21f", <-15.4, 1.0, 0.0>, <-0.2, 0.0, 0.0>, 0.0, PRIM_TEXTURE, 6, "5748decc-f629-461c-9a36-a35a221fe21f", <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>, 0.0, PRIM_TEXTURE, 1, "5748decc-f629-461c-9a36-a35a221fe21f", <2.5, 1.0, 0.0>, <0.25, 0.0, 0.0>, 0.0]);
//3. - De gauche à droite les numéros de face sont : 3, 7, 4, 6, et 1 ; mais les paramètres de textures pour les faces 3, 4, et 1 doivent être ajustés : (la texture dont l'UUID est 5748decc-f629-461c-9a36-a35a221fe21f est la texture standard blanche)
//Face 3 - PRIM_TEXTURE, 3, "5748decc-f629-461c-9a36-a35a221fe21f", <2.5, 1.0, 0.0>, <-0.25, 0.0, 0.0>, 0.0 => Hor repeat = 2.5 ; vert repeat = 1.0 ; hor offset = -0.250
//Face 4 - PRIM_TEXTURE, 4, "5748decc-f629-461c-9a36-a35a221fe21f", <-15.4, 1.0, 0.0>, <-0.2, 0.0, 0.0>, 0.0 => Hor repeat = 15.4 flipped ; vert repeat = 1.0 ; hor offset = -0.200
//Face 1 - PRIM_TEXTURE, 1, "5748decc-f629-461c-9a36-a35a221fe21f1", <2.5, 1.0, 0.0>, <0.25, 0.0, 0.0>, 0.0 => Hor repeat = 2.5 ; vert repeat = 1.0 ; hor offset = 0.250

llSetPrimitiveParams([PRIM_COLOR, 0, <0.0, 0.0, 0.0>, 1.0, PRIM_COLOR, 1, <0.0, 0.0, 1.0>, 1.0, PRIM_COLOR, 2, <0.0, 1.0, 0.0>, 1.0, PRIM_COLOR, 3, <0.0, 1.0, 1.0>, 1.0, PRIM_COLOR, 4, <1.0, 0.0, 0.0>, 1.0, PRIM_COLOR, 5, <1.0, 0.0, 1.0>, 1.0, PRIM_COLOR, 6, <1.0, 1.0, 0.0>, 1.0, PRIM_COLOR, 7, <1.0, 1.0, 1.0>, 1.0]);
// Coloriage des faces; à remettre en blanc lors de l'utilisation normale
//PRIM_COLOR, 5, <1.0, 0.0, 1.0>, 1.0 => les couleurs RGB sont choisies en fonction du muméro de face (5 = 101, 7 = 111 etc)
}
}

 


Poser un cube, le « Modifier » (Edit), choisir l’onglet Contenu (Content), y glisser le script, attendre 1 second et le travail se fait tout seul. Les couleurs sont faites exprès pour que l’on puisse distinguer les faces.
La lecture du script donne tous les détails sur la technique employée ; au passage admirer la redoutable complexité de l’instruction llSetPrimitiveParams et de l’usage que l’on peut en faire.
Il peut arriver, si vous modifier le script, que les proportions des faces ne correspondent pas à celles attendues ; n’oubliez pas que la largeur maximum d’une prim est de 10 mètres. Si le rapport largeur/hauteur déclaré pour une image que multiplient la hauteur de la prim que multiplie 6 est supérieur à 10 mètres alors le résultat ne sera pas conforme.
Exemple : pour des images de 1.3333 de rapport (ex : 640 x 480) et une hauteur de 1.25, la largeur de la prim sera pile poil 10 mètres alors que pour une hauteur de 1.2, la largeur sera de 9m60. Mais pour une hauteur de 1.5, la largeur de la prim sera toujours de 10 mètres, donc un mauvais rendu des images.
Il est possible de placer des images différentes sur chacune des 5 faces ;cela peut aussi être fait par script en remplaçant l'UUID de texture blanche par l'UUID d'une image de la bonne proportion.