|
|
Warp wrote:
>
> It would be really nice to get a short (and undivided) example code that
> demonstrates this. It's not nice to have to get some include file from
> somewhere.
All right, but i'm afraid it's no more that short then.
// BEGIN POV-Code
camera {
location <0.2,0.2,-1>
look_at <0,0,0>
right (4/3)*x
}
light_source {
<1000, 2500, -5000>
color rgb 1.2
}
#include "transforms.inc"
#declare IC_Arr=array[12]
#macro IC_Merge_Array(Array)
#local Size=dimension_size(Array,1);
function {
min(
#local Counter=0;
#while (Counter<Size)
#if (Counter>0) , #end
Array[Counter] (x,y,z)
#local Counter=Counter+1;
#end
)
}
#end
#macro IC_Matrix (Fn, Mtrx)
function {
Fn(x*Mtrx[0][0] + y*Mtrx[0][1] + z*Mtrx[0][2],
x*Mtrx[1][0] + y*Mtrx[1][1] + z*Mtrx[1][2],
x*Mtrx[2][0] + y*Mtrx[2][1] + z*Mtrx[2][2])
}
#end
#macro IC_RotateR (Fn, Vect)
#local Vect=Vect+<0,0,0>;
#local Cx=-Vect.x;
#local Cy=-Vect.y;
#local Cz=-Vect.z;
#local MtrxA=array[3][3]
#local MtrxB=array[3][3]
#local MtrxC=array[3][3]
#local MtrxA[0][0] = 1.0;
#local MtrxA[0][1] = 0;
#local MtrxA[0][2] = 0;
#local MtrxA[1][0] = 0;
#local MtrxA[1][1] = cos(Cx);
#local MtrxA[1][2] = -sin(Cx);
#local MtrxA[2][0] = 0;
#local MtrxA[2][1] = sin(Cx);
#local MtrxA[2][2] = cos(Cx);
#local MtrxB[0][0] = cos(Cy);
#local MtrxB[0][1] = 0;
#local MtrxB[0][2] = sin(Cy);
#local MtrxB[1][0] = 0;
#local MtrxB[1][1] = 1;
#local MtrxB[1][2] = 0;
#local MtrxB[2][0] = -sin(Cy);
#local MtrxB[2][1] = 0;
#local MtrxB[2][2] = cos(Cy);
#local MtrxC[0][0] = cos(Cz);
#local MtrxC[0][1] = -sin(Cz);
#local MtrxC[0][2] = 0;
#local MtrxC[1][0] = sin(Cz);
#local MtrxC[1][1] = cos(Cz);
#local MtrxC[1][2] = 0;
#local MtrxC[2][0] = 0;
#local MtrxC[2][1] = 0;
#local MtrxC[2][2] = 1;
#local fn_X=IC_Matrix (function(x, y, z){ Fn(x, y, z) }, MtrxA)
#local fn_Y=IC_Matrix (function(x, y, z){ fn_X(x, y, z) }, MtrxB)
IC_Matrix (function(x, y, z){ fn_Y(x, y, z) }, MtrxC)
#end
#macro IC_Rotate (Fn, Vect)
#local Vect=Vect+<0,0,0>;
#local Cx=(Vect.x/180)*pi;
#local Cy=(Vect.y/180)*pi;
#local Cz=(Vect.z/180)*pi;
IC_RotateR (function(x, y, z){ Fn(x, y, z) }, <Cx, Cy, Cz>)
#end
#macro IC_Cone (Start, Radius1, End, Radius2)
#local Start=Start+<0,0,0>;
#local Cx=Start.x;
#local Cy=Start.y;
#local Cz=Start.z;
#local Len=vlength(End-Start);
#if (Len=0)
#error "iso_csg.inc: Error: zero height cone"
#end
#local fn_T=function { Reorient_Trans(End-Start, x) }
#local fn_X=function(x, y, z){
max(sqrt(y^2 + z^2) - Radius1+x*((Radius1-Radius2)/Len), -x, x-Len)
}
#local fn_Y=
function(x, y, z){
fn_X(fn_T(x, y, z).x,
fn_T(x, y, z).y,
fn_T(x, y, z).z)
}
function {
(fn_Y((x-Cx),(y-Cy),(z-Cz)))
}
#end
#declare IC_Arr=array[12]
#macro IC_Merge_Array(Array)
#local Size=dimension_size(Array,1);
function {
min(
#local Counter=0;
#while (Counter<Size)
#if (Counter>0) , #end
Array[Counter] (x,y,z)
#local Counter=Counter+1;
#end
)
}
#end
#declare IC_Arr[0]=IC_Cone(0, 0, x+y, 1)
#declare IC_Arr[1]=IC_Rotate(IC_Arr[0], 30*z)
#declare IC_Arr[2]=IC_Rotate(IC_Arr[1], 60*z)
#declare IC_Arr[3]=IC_Rotate(IC_Arr[2], 90*z)
#declare IC_Arr[4]=IC_Rotate(IC_Arr[3], 120*z)
#declare IC_Arr[5]=IC_Rotate(IC_Arr[4], 150*z)
#declare IC_Arr[6]=IC_Rotate(IC_Arr[5], 180*z)
#declare IC_Arr[7]=IC_Rotate(IC_Arr[6], 210*z)
#declare IC_Arr[8]=IC_Rotate(IC_Arr[7], 240*z)
#declare IC_Arr[9]=IC_Rotate(IC_Arr[8], 270*z)
#declare IC_Arr[10]=IC_Rotate(IC_Arr[9], 300*z)
#declare IC_Arr[11]=IC_Rotate(IC_Arr[10], 330*z)
#declare fn_XX= IC_Merge_Array(IC_Arr)
isosurface
{
function { fn_XX(x, y, z) }
max_gradient 1.6
contained_by { box { -2, 2 } }
pigment { rgb <0, 0.2, 1.1> }
finish { specular 0.3 }
scale 0.1
}
// END POV-Code
--
POV-Ray tutorials, IsoWood include,
TransSkin and more: http://www.tu-bs.de/~y0013390/
Last updated 20 Apr. 2002 _____./\/^>_*_<^\/\.______
Post a reply to this message
|
|