|
|
> Hello everyone!
>
> I'm trying to build two cylinders a bit transparent on top of each other (one
> blue and the other red). Inside theses cylinders, there is a circular arrow
> (again one blue and the other red). I want the red one to be fully transparent
> (at the beginning, because the final goal is to make an animation, in which this
> red arrow will become not transparent).
> On the rendered picture, we can see a kind of "hole" in the red cylinder that is
> unwanted. It's like if a part of the red arrow make trouble while rendering and
> the transparency of the red cylinder is not uniform.
>
> Here is the code:
>
> #include "colors.inc"
Don't include those as you don't use the textures they define.
> //#include "glass.inc"
> //#include "textures.inc"
>
>
> #declare epaisseurBL = 6;
> #declare epaisseurIL = 6;
> #declare epaisseurTL = 16;
> #declare linethk =0.1;
>
> #declare camy=145;
> #declare camz=170;
> #declare offsettxt=50;
>
> #declare vuex= atan2(camy,camz)*180/pi;
> #declare vuey= atan2(camz,offsettxt)*180/pi;
>
> camera {
> location<0,0,0>
> look_at <0,0,-1>
> rotate<-2,0,0>
> translate <-18,(epaisseurBL+epaisseurIL+epaisseurTL)/2, 200>
> rotate <-vuex,0,0>
> angle 30
> }
>
>
> global_settings
> {
> max_trace_level 9
>
>
> }
>
> background { color White}
> light_source {
> <0, 10, 30>
> color White
> fade_distance 60
> fade_power 2
> shadowless
>
> }
> light_source {
> <0, 10, 30>
> color White
> fade_distance 60
> fade_power 2
> shadowless
> }
>
> light_source {
> <20, 10, 0>
> color White
> fade_distance 60
> fade_power 2
> shadowless
>
> }
> light_source {
> <20, 10, 0>
> color White
> fade_distance 60
> fade_power 2
> shadowless
> }
>
> light_source {
> <0, 50, 0>
> color White
> fade_distance 60
> fade_power 2
> shadowless
>
> }
> // vert <0.2,1,0>
> #declare couleur1 = Blue;
> #declare amb = 0.4;
> #declare couleur2 = Red;
> #declare transmission = 0;
> #declare trans1 = 0;
> #declare trans2 = 0;
> #declare dif = 0.3;
> #declare ref = 0;
> #declare ang = 70;
>
> #declare refcyl = 0;
>
> #declare epaisseurBL = 10;
> #declare epaisseurIL = 4;
> #declare epaisseurTL = 10;
>
> #declare FlecheCirculaire = merge{
> difference{
>
> cylinder {
> <0, -1, 0>, // Center of one end
> <0, 1, 0>, // Center of other end
> 25 // Radius
>
> }
Useless merge
> //merge{
> cylinder {
> <0, -3, 0>, // Center of one end
> <0, 3, 0>, // Center of other end
> 20 // Radius
>
> }
> prism {
> linear_spline
> -2, // sweep the following shape from here ...
> 2, // ... up through here
> 3, // the number of points making up the shape ...
> < 0, 0>, // point#1
> < tan(ang/2*pi/180)*50,50>, // point#2
> < - tan(ang/2*pi/180)*50, 50> // point#3
>
> }
> //}
>
> }
> prism {
> linear_spline
> -1, // sweep the following shape from here ...
> 1, // ... up through here
> 3, // the number of points making up the shape ...
> < -4, 0>, // point#1
> < 4,0>, // point#2
> < 0,7> // point#3
>
> rotate<0,90-ang/2,0>
> translate<-sin(ang/2*pi/180)*22.5,0,cos(ang/2*pi/180)*22.5>
> }
> cylinder {
> <0, -1, 0>, // Center of one end
> <0, 1, 0>, // Center of other end
> 2 // Radius
>
> }
> }
>
>
>
> #declare MTJ =
> merge {
> object { FlecheCirculaire
> scale <0.8,0.65,0.8>
> texture {
> pigment{color couleur1 transmit transmission}
> finish { ambient amb diffuse dif reflection ref }
> }
> translate <trans1,0,0>
> translate <0,epaisseurBL/2,0>
> }
>
> object { FlecheCirculaire
> scale <0.8,0.65,0.8>
> texture {
> pigment{color couleur2 transmit transmission+1}
Change this line like this:
pigment{color couleur2 transmit 1 -transmission}
Otherwise, you get a transmission value larger than 1 whitch gives
strange results.
> finish { ambient amb diffuse dif reflection ref }
> }
> translate <trans2,0,0>
> translate <0,epaisseurBL+epaisseurIL+epaisseurTL/2,0>
> }
> }
> object { MTJ scale <1,1,1>}
>
>
> //Blue layer
>
> #declare layer1=
>
> cylinder {
> <0, 0, 0>, // Center of one end
> <0,epaisseurBL, 0>, // Center of other end
> 30 // Radius
> texture {
> pigment{color couleur1 transmit 0.7}
> finish { ambient amb diffuse dif reflection ref }
> }
> }
>
>
>
> //Insulator layer
> #declare layer2=
Changes to prevent coincident surfaces...
> cylinder {
> <0, epaisseurBL, 0>, // Center of one end
<0, epaisseurBL+0.00001, 0>,
> <0, epaisseurBL+epaisseurIL, 0>, // Center of other end
<0, epaisseurBL+epaisseurIL-0.00001, 0>,
> 30 // Radius
> texture {
> pigment{color White transmit 1}
> finish { ambient amb diffuse dif reflection ref }
> }
> }
>
>
>
> //Red layer
>
> #declare layer3=
> cylinder {
> <0, epaisseurBL+epaisseurIL, 0>, // Center of one end
> <0, epaisseurBL+epaisseurIL+epaisseurTL, 0>, // Center of other end
> 30 // Radius
> texture {
> pigment{color couleur2 transmit 0.7}
> finish { ambient amb diffuse dif reflection ref }
> }
> }
>
Your problem is here.
> object{layer1}
> object{layer2}
> object{layer3}
>
You have coincident surfaces.
Redefine your layer objects so that they never overlap and have a very
small gap between them.
Another solution would be to translate layer 1 slightly up and layer3
slightly down.
>
>
>
>
>
> If you want to see the red arrow, change the transmit parameter line 159.
> I use those rendering parameter in my .ini file:
>
> Width=1024
> Height=768
> Antialias=On
> Sampling_Method=2
> Antialias_Threshold=0.01
> Antialias_Depth=4
>
>
> I tried to change the max_trace_level up to 50, increase the Antialias Depth
> until 7 and Antialias_Threshold down to 0.001 without success.
>
> I use the 3.6 version of POV-ray.
>
> If you have any idea to solve this problem tell me!
>
> JO
>
>
>
>
>
>
Post a reply to this message
|
|