|
|
Here is the source of the bottle macro. Any comments appreciated.
--
Paul Hewson
pau### [at] vifcom
-----------
One never knows, do one?
// <Source starts here.>
// File: bottle.inc
// Vers: 3.1
// Desc: Parameterized bottle include
// Date: Nov 6, 1999
// Auth: Paul Hewson
/*--------------------------------------------------------------------------
-----------
The macro takes the following parameters
NH The neck height
NR The neck radius
SH The shoulder height (the shoulder is the curved piece that joins
body to neck)
UDPx User defined point x
UDPy User defined point y
These allow you to pull the shoulder into different shapes by
adding a point
to the lathe.
BH The height of the body cylinder
BR The radius of the body
Glass_Texture I found I had to add the texture to each component,
because the normal
would interfere otherwise. If someone sees a better way,
please let
me know.
============================================================================
=============*/
#macro Bottle_Macro (NH, NR, SH, UDPx, UDPy, BH, BR, Glass_Texture)
#declare Glass_Thickness = .05;
// Neck parameters
#declare Neck_Height = NH;
#declare Neck_Radius = NR;
// Shoulder parameters
//
// Shoulder is a lathe object with end points joining the neck to body
#declare Shoulder_Height = SH;
#declare p1x = UDPx;
#declare p1y = UDPy;
// #declare p2 =
// Body parameters
#declare Body_Height = BH;
#declare Body_Radius = BR;
// Base parameters
#declare Base_Torus_Radius = .15
// Textures inner and outer
#declare Bottle_Texture = texture { Glass_Texture }
#declare Bottle_interior = interior { I_Glass }
#declare Bottle_Normal = normal {radial frequency 2 scale 3 }
// #declare <>;
// Base
#declare Base =
merge
{
torus
{
Body_Radius - Base_Torus_Radius , //
Base_Torus_Radius // Minor
// pigment {rg
bt 1}
}
intersection
{
cylinder
{
<0,0,0> // base point
<0,Base_Torus_Radius*2 + Glass_Thickness*2,0> // Cap
Base_Torus_Radius*2 + Glass_Thickness*2
Body_Radius
}
difference
{
sphere
{
<0,0,0> , 1
scale <Body_Radius, Base_Torus_Radius + Glass_Thickness*2,
Body_Radius>
}
sphere
{
<0,0,0> , 1
scale <Body_Radius - Base_Torus_Radius*2, Base_Torus_Radius ,
Body_Radius - Base_Torus_Radius*2>
}
}
//
} // End of intersection
texture {Bottle_Texture} interior {Bottle_interior}
} // End of merge
// Body
#declare Body =
difference
{
cylinder
{
<0,0,0> // Base
<0, Body_Height, 0>
Body_Radius
texture {Bottle_Texture} interior {Bottle_interior}
}
cylinder
{
<0,-0.1,0> // Base
<0, Body_Height+ .1, 0>
Body_Radius - Glass_Thickness
texture {Bottle_Texture}
normal{Bottle_Normal}
}
}
// Shoulder--------------------------------------------
#declare Shoulder =
union
{
lathe
{
cubic_spline
5
<Body_Radius, Body_Height - (Shoulder_Height )> // Control point
<Body_Radius, Body_Height-.001> // End point meets body
<p1x, p1y> // User defined point
<Neck_Radius, Body_Height + Shoulder_Height + .0001> // End point meets neck
<Neck_Radius, Body_Height + Shoulder_Height * 2> // Control point
texture {Bottle_Texture} interior {Bottle_interior}
}
lathe
{
cubic_spline
5
<Body_Radius - Glass_Thickness,Body_Height - (Shoulder_Height )> // Control
point
<Body_Radius - Glass_Thickness, Body_Height -.001> // End point meets body
<p1x - Glass_Thickness, p1y> // User defined point
<Neck_Radius - Glass_Thickness, Body_Height + Shoulder_Height+ .0001> // End
point meets neck
<Neck_Radius
- Glass_Thickness, Body_Height + Shoulder_Height * 2> // Control point
texture {Bottle_Texture} // interior {Bottle_interior}
normal{Bottle_Normal}
}
} // End of difference
// End of Shoulder--------------------------------------------
// Neck
#declare Neck =
difference
{
cylinder
{
<0,Shoulder_Height + Body_Height,0> file://Base
<0, Neck_Height + Shoulder_Height + Body_Height, 0>
Neck_Radius
texture {Bottle_Texture} interior {Bottle_interior}
}
cylinder
{
<0,Shoulder_Height + Body_Height - 0.1,0> file://Base
<0, Neck_Height + Shoulder_Height + Body_Height + .1, 0>
Neck_Radius - Glass_Thickness
texture {Bottle_Texture} file://interior {Bottle_interior}
normal{Bottle_Normal}
}
}
file://Lip
#declare Lip =
difference
{
cylinder
{
<0, Shoulder_Height + Body_Height + Neck_Height - .2, 0> file://Base
<0, Shoulder_Height + Body_Height + Neck_Height, 0>
Neck_Radius + .1
}
cylinder
{
<0, Shoulder_Height + Body_Height + Neck_Height - .21, 0>
<0, Shoulder_Height + Body_Height + Neck_Height+ .01, 0>
Neck_Radius - Glass_Thickness
}
texture {Bottle_Texture} interior {Bottle_interior}
}
// #declare Bottle =
object
{
merge
{
object {Base}
object {Body}
object {Shoulder}
object {Neck}
object {Lip}
// object {}
}
}
#end
Post a reply to this message
|
|
|
|
Dave Cook <nos### [at] homecom> wrote in message
news:382a4ec2@news.povray.org...
> Thanks for posting (and writing) this Paul! Any chance you might post an
> example .pov for us?
>
> TIA, Dave
>
No problem, here is a modified version of the demo render.
// <source follows>
// Persistence of Vision Ray Tracer Scene Description File
// File: b3.pov
// Vers: 3.1
// Desc: Sample bottle file
// Date: 11/10/99
// Auth: Paul H.
//
/*----------------------------------------------
Makes some sample bottles from the macro
Designed for UVPov patch (whatever the current
version is. Comment out the global photon block
and the photon statement in each object
to render in 3.1g.
===============================================*/
#version 3.1
#include "colors.inc"
#include "glass.inc"
#include "bottle.inc"
#declare phd=1;
// If you don't want to use photons
// comment out the following line.
#declare Use_Photons = yes;
global_settings
{
max_trace_level 45
#ifdef (Use_Photons)
photons
{
gather 20, 100
radius 0.1*phd, 2, 2//, 0.1*phd
autostop 0
jitter .4
expand_thresholds 0.2, 40
}
#end
}
//
file://-------------------Textures (from Stones.inc)
//
#declare P_Grnt0 =
pigment
{
granite
turbulence 0.4
color_map
{
[0.000, 0.153 color rgbf <0.729, 0.502, 0.451, 0.000>
color rgbf <0.769, 0.686, 0.592, 0.000>]
[0.153, 0.398 color rgbf <0.769, 0.686, 0.592, 0.000>
color rgbf <0.843, 0.753, 0.718, 0.000>]
[0.398, 0.559 color rgbf <0.843, 0.753, 0.718, 0.000>
color rgbf <0.780, 0.667, 0.561, 0.000>]
[0.559, 0.729 color rgbf <0.780, 0.667, 0.561, 0.000>
color rgbf <0.741, 0.659, 0.576, 0.000>]
[0.729, 1.001 color rgbf <0.741, 0.659, 0.576, 0.000>
color rgbf <0.729, 0.502, 0.451, 0.000>]
}
}
file://----- Creamy Whites with yellow & light gray
#declare P_Grnt1 =
pigment
{granite
turbulence 0.6
color_map
{
[0.000, 0.212 color rgbf <0.898, 0.898, 0.851, 0.000>
color rgbf <0.969, 0.980, 0.875, 0.000>]
[0.212, 0.424 color rgbf <0.969, 0.980, 0.875, 0.000>
color rgbf <0.859, 0.859, 0.859, 0.000>]
[0.424, 0.627 color rgbf <0.859, 0.859, 0.859, 0.000>
color rgbf <0.992, 0.922, 0.659, 0.000>]
[0.627, 0.881 color rgbf <0.992, 0.922, 0.659, 0.000>
color rgbf <0.937, 0.965, 0.902, 0.000>]
[0.881, 1.001 color rgbf <0.937, 0.965, 0.902, 0.000>
color rgbf <0.898, 0.898, 0.851, 0.000>]
}
}
// ----------------------------------------
camera
{
location <0.0, 5, -18.0>
direction 1.5*z
right 4/3*x
look_at <0, 4.5, 0.0>
}
// Set a color of the background (sky)
background { color red 0.1 green 0.3 blue 0.8 }
light_source
{
0*x // light's position (translated below)
color red 1.0 green 1.0 blue 1.0 // light's color
translate <-10, 30, -30>
}
// ----------------------------------------
object
{
Bottle_Macro (1, .35, 3.5, .47, 6.3, 5, 1.25, T_Glass3 )
#ifdef (Use_Photons)
photons
{
separation 0.02*phd
refraction on
reflection on
ignore_photons
}
#end
rotate <0,45,0>
}
/*----------------------------------------------
// More bottles
object
{
Bottle_Macro (2, .5, 2, 1.4, 8.5, 7, 1.5, T_Dark_Green_Glass )
photons
{
separation 0.02*phd
refraction on
reflection on
file://ignore_photons
}
rotate <0,120,0>
translate 5*x
}
object
{
Bottle_Macro (.2, .35, 2, .6, 5, 4, 1, T_Glass4 )
photons
{
separation 0.02*phd
refraction on
reflection on
ignore_photons
}
rotate <0,95,0> translate -5*x
}
==============================================*/
// Box in the background
box
{
<20, 20, 10> // one corner position <X1 Y1 Z1>
< -20, -1, 11> // other corner position <X2 Y2 Z2>
texture
{
pigment
{
checker
pigment {P_Grnt0}
pigment {P_Grnt1}
}
scale 3
}
}
// box to stand bottles on
box
{
<-20, -3, -10> // one corner position <X1 Y1 Z1>
< 20, 0, 10> // other corner position <X2 Y2 Z2>
texture
{
pigment
{
checker
pigment {P_Grnt0}
pigment {P_Grnt1}
}
scale 3
}
}
Post a reply to this message
|
|