|
|
I've encountered 2 possible bugs while using POV-Ray 3.6.
1) I have a model of a pencil where I've used some 30 planes to clip, and
thus "sharpen", the front of the pencil. This works great until the model
is placed in a light group. When that happens, the clipped portion of the
model is rendered black rather than with the wood texture that it should
have. The model works fine if it's not inside a light group. I've added
the code for the model at the end of this post.
2) Light sources that are part of composite objects that are used within
light groups don't appear to give off light. Below is the code that
demonstrates this problem. When you run it, you will see the spotlight
shining on the ground plane. Uncomment the light group and run it again
and you'll see that it doesn't work anymore.
#version 3.5;
#include "colors.inc"
#include "finish.inc"
global_settings {
assumed_gamma 1.0
ambient_light .3
}
// ----------------------------------------
camera {
location <0.0, 0.5, -4.0>
direction 1.5*z
right x*image_width/image_height
look_at <0.0, 0.0, 0.0>
}
sky_sphere {
pigment {
gradient y
color_map {
[0.0 rgb <0.6,0.7,1.0>]
[0.7 rgb <0.0,0.1,0.8>]
}
}
}
#declare m = 1;
#declare cm = m/100;
#declare km = 1000*m;
#declare mm = cm/10;
//light_source { <0, 0, 0> color White translate <-30, 30, -30> }
// ----------------------------------------
#local SL_R = 30*cm;
#local SL_L = 50*cm;
#local SL_T = 2*cm;
#local SL_Bulb_Offset = 20*cm;
#declare SearchLight = union {
union {
light_source {
SL_Bulb_Offset*x // light's position (translated
below)
color rgb <1,1,1> / 3 // light's color
spotlight // this kind of light source
point_at <SL_Bulb_Offset*2, 0, 0> // direction of spotlight
radius 30
tightness 0
falloff 35
looks_like {
sphere {SL_Bulb_Offset*x, SL_R/2
hollow
no_shadow
texture {
pigment {White}
finish {Luminous}
} // texture
}
}
}
// Body of Search Light
difference {
cylinder {-20*cm*x, SL_L*x, SL_R}
cylinder {0, SL_L*x, (SL_R - SL_T) translate SL_T*x pigment {White}}
pigment {Gray50}
}
translate SL_R*y
}
}
///////////// Light Groups /////////////////////////////////////////////
//light_group {
light_source { <-100, 100, -100> color White }
object {SearchLight rotate -90*z}
plane { y, -1 pigment { White } } // this plane gets shadows from both
spheres!
//}
///////////////////////////////////////////////////////
// Pencil Model
///////////////////////////////////////////////////////
// Persistence of Vision Ray Tracer Scene Description File
// File: Pencil.inc
// Vers: 3.5
// Desc: Pencil Model
// Date: 9/7/2004
// Auth: Ray Benjamin
#ifndef (__pencil__)
#declare __pencil__ = 1;
#ifndef (inch)
#declare inch = 1;
#declare in = inch;
#end
#ifndef (foot)
#declare foot = 12;
#declare ft = foot;
#end
#ifndef (cm)
#declare cm = 0.393701*inch;
#declare m = 100*cm;
#declare km = 1000*m;
#declare mm = cm/10;
#end
#declare Pencil_T = 4*mm;
// Eraser Crimp
#declare Eraser_Crimp_L = 1.4*cm;
#declare Eraser_Crimp_T = .025*mm;
#declare Eraser_Crimp_R = Pencil_T;
#declare Eraser_Crimp_Ring_R = .35*mm;
#declare T_Eraser_Crimp = texture {
T_Chrome_2C
finish {
irid { .25 thickness .25 turbulence .5 }
}
}
#declare Eraser_Crimp = difference {
union {
cylinder {0, Eraser_Crimp_L*x, Eraser_Crimp_R}
#declare Eraser_Crimp_Ring = torus {Eraser_Crimp_R Eraser_Crimp_Ring_R
rotate 90*z}
#local Eraser_Rings = union {
object {Eraser_Crimp_Ring translate 0*mm*x}
object {Eraser_Crimp_Ring translate 1*mm*x}
}
object {Eraser_Rings translate 3.25*mm*x}
object {Eraser_Rings translate 1*cm*x}
}
#local Eraser_Crimp_Cyl_R = .17*mm;
#local Eraser_Crimp_Cylinder = cylinder {0, 4.5*mm*x Eraser_Crimp_Cyl_R
translate <4.75*mm,Eraser_Crimp_R,0>}
#local Count = 0;
#local Angle = 0;
#local Delta = 12;
#while (Count < 30)
object {Eraser_Crimp_Cylinder rotate Angle*x}
#local Count = Count + 1;
#local Angle = Angle + 12;
#end // while
object {Eraser_Crimp_Cylinder}
texture {T_Eraser_Crimp}
}
#declare Eraser_L = 6*mm;
#declare Eraser_R = Pencil_T - Eraser_Crimp_T*2;
#declare T_Eraser = texture {
pigment { rgb <.9,.5,.5> }
finish {
diffuse .5
roughness 1
}
}
texture {
pigment {
bozo
color_map {
[0 Clear]
[.7 Clear]
[.85 rgbf <.7,.7,.7,.5>]
[1.0 rgbf <1,1,1,.9>]
} // color_map
turbulence .1
scale 4*mm
}
finish {
diffuse .5
roughness 1
}
}
// Eraser
#declare Eraser = object {
Round_Cylinder_Merge(<0,0,0>, <Eraser_L,0,0>, Eraser_R, .85*mm)
texture {T_Eraser}
}
// Eraser Assembly
#declare Eraser_Assembly = union {
object {Eraser_Crimp}
object {Eraser translate Eraser_Crimp_L*x}
}
#declare Eraser_Assembly_L = Eraser_Crimp_L + Eraser_L;
// Pencil Lead
#declare Pencil_L = 6.5*inch - Eraser_Assembly_L;
#declare Paint_T = Pencil_T - .1*mm;
#declare Pencil_Lead_R = .06*inch;
#declare Pencil_Tip_L = .5*inch;
#declare T_Pencil_Lead = texture {
pigment {Gray15}
finish {
diffuse .5
roughness .3
} // finish
} // texture
// Pencil Sharpener - used to cut away pencil at tip to "sharpen" it.
#declare Pencil_Sharpener = union {
#local Blade = plane {-y,0}
#local AngleZ = 20;
#local AngleZ_Delta = 5;
#local AngleX = 0;
#local AngleX_Delta = 3;
#while (AngleX < 360)
object { Blade rotate AngleZ+rand(R1)*AngleZ_Delta*z rotate AngleX*x}
#local AngleX = AngleX + rand(R1)*AngleX_Delta;
#end // while
plane {x, 0 translate 3*mm*x rotate -2*z}
}
// Cutout for Lead
#declare Lead_Cylinder = cylinder {-Pencil_L/2*x Pencil_L/2*x Pencil_Lead_R
}
#declare Pencil_Lead = difference {
cylinder {-Pencil_L/2*x Pencil_L/2*x Pencil_Lead_R texture
{T_Pencil_Lead}}
object {Pencil_Sharpener translate -Pencil_L/2*x}
cutaway_textures
bounded_by {
object {Lead_Cylinder}
}
}
// Create the lettering for the pencil
#declare Pencil_Lettering_Decal = height_field {
png // the file type to read (tga/pot/pgm/ppm/png/sys)
"PencilLetteringHF.png" // the file name to read
smooth // smooth surface normal
water_level .01 // truncate/clip below N (0.0 ... 1.0)
texture { T_Gold_2C }
scale <7*cm,.02,4*mm>
rotate -90*x
translate <0,-Pencil_T,-Pencil_T>
}
// create a TrueType text shape
#declare Pencil_Lettering = text {
ttf // font type (only TrueType format for now)
"crystal.ttf", // Microsoft Windows-format TrueType font file name
" BENJAMIN DreamWriter 2048 FINE (0.5)", // the string to
create
1, // the extrusion depth
0 // inter-character spacing
translate <0,-.5,0>
scale .125
texture {T_Gold_2B}
translate <-Text_Space("Crystal.ttf"," BENJAMIN DreamWriter 2048
FINE (0.5)",.125,0)/2+2*cm,0,-Pencil_T>
}
// Pencil Color
#local P_Pencil = rgb <1,221/255, 63/255>;
// Make the Wood portion of the Pencil
#macro Make_Pencil_Wood(WoodTexture)
difference {
union {
// Paint
difference {
object {Hexagon scale <Pencil_L/2,Pencil_T,Pencil_T>}
object {Hexagon scale <Pencil_L/2*1.1,Pencil_T-.1*mm,Pencil_T -
..1*mm>}
pigment { P_Pencil }
} // diff
// Wood
object {Hexagon scale <Pencil_L/2,Pencil_T-.1*mm,Pencil_T - .1*mm>
texture {WoodTexture rotate 90*y}}
// lead
} // union
object {Pencil_Sharpener translate -Pencil_L/2*x}
//object {Pencil_Lettering_Decal }
cutaway_textures
bounded_by {
cylinder {-Pencil_L/2*x, (Pencil_L/2+Eraser_Assembly_L)*x Pencil_T +
..03}
}
} // difference
#end
// Macro to make actual pencil given the wood texture
// Should add length, paint color, lettering color to parameters
#macro Make_Pencil(WoodTexture)
union {
difference {
object {Make_Pencil_Wood(WoodTexture)}
object {Lead_Cylinder}
object {Pencil_Lettering translate <1*cm,0,-.01>} // Plain Lettering
}
object {Pencil_Lead}
//
object {Eraser_Assembly translate Pencil_L/2*x}
//cylinder {-Pencil_L/2*x, (Pencil_L/2+Eraser_Assembly_L)*x Pencil_T +
..03 pigment {rgbf <1,0,0,.5>}}
translate (Pencil_T)*y
}
#end
#declare Old_Pencil = Make_Pencil(T_Wood6)
#declare New_Pencil = Make_Pencil(T_Wood19)
//////-----------------------------------------------
#end // ifndef __pencil__
Post a reply to this message
|
|