|
|
Le 2024-09-02 à 05:39, yesbird a écrit :
> Hi, all !
>
> While playing with meshes I've encountered strange behavior of spheres,
> positioned at mesh vertices - after changing the scale they move from
> previous location (see images). Looks like the scale
> operation applied to a whole array of spheres, produced by loop, but the
> scale operator is inside the sphere object. I expected they would stay
> in place and only change the size.
>
> What I'm missing ? Any suggestions please ...
> --
> YB
>
> // ------------------------------------------------------------------
> #version 3.8;
> global_settings { assumed_gamma 1 }
>
> camera {
> perspective
> angle 25
> location <20,15,20> * 0.2
> look_at <0.5,0.5,0>
> right x * image_width / image_height
> }
>
> light_source{<-500,0,0> rgb 1} light_source{<500,0,0> rgb 1}
> light_source{<0,0,-500> rgb 1} light_source{<0,0,500> rgb 1}
> light_source{<20,15,20> rgb 0.4}
>
>
> #declare VertexVectors= array[24] {
> <0,0,0>, <0.5,0,0>, <0.5,0.5,0>, //1
> <0.5,0,0>, <1,0,0>, <0.5,0.5,0>, //2
> <1,0,0>, <1,0.5,0>, <0.5,0.5,0>, //3
> <1,0.5,0>, <1,1,0>, <0.5,0.5,0>, //4
> <1,1,0>, <0.5,1,0>, <0.5,0.5,0>, //5
> <0.5,1,0>, <0,1,0>, <0.5,0.5,0>, //6
> <0,1,0>, <0,0.5,0>, <0.5,0.5,0>, //7
> <0,0.5,0>, <0,0,0>, <0.5,0.5,0> //8
> }
>
> // Mesh
> mesh2 {
>
> #local len = dimension_size(VertexVectors,1);
> vertex_vectors {
> len,
> #for (i, 0, len-1)
> VertexVectors[i]
> #end
> }
>
> face_indices {
> 8,
> <0,1,2>, <3,4,5>, //1 2
> <6,7,8>, <9,10,11>, //3 4
> <12,13,14>, <15,16,17>, //5 6
> <18,19,20>, <21,22,23> //7 8
> }
>
> pigment {rgb 1}
> }
>
>
> // Spheres
> #local len = dimension_size(VertexVectors,1) - 1;
> #for (i, 0, len)
> sphere { VertexVectors[i], 0.04
> texture { pigment {rgb <0.1, 0.3, 0.1>} }
> scale y * 1.2 // Why they moves ?
> }
> #end
> // ------------------------------------------------------------------
The scale is applied relative to the origin of the coordinate system,
not to the centre of the object.
That mean that the centre of your spheres are scaled.
You need to scale your spheres when they are at <0,0,0> then translate
them to the desired location.
Use this instead :
// Spheres
#local len = dimension_size(VertexVectors,1) - 1;
#for (i, 0, len)
sphere { 0, 0.04 scale y * 1.2 // No longer move
texture { pigment {rgb <0.1, 0.3, 0.1>} }
translate VertexVectors[i]
}
Post a reply to this message
|
|