|
|
Below is the source code for the image I posted here:
http://news.povray.org/povray.binaries.images/message/<4b5a4460%40news.povray.org>
Newsgroup: povray.binaries.images
Date: 23rd January 2010
Subject: Sheared supertori
Tor Olav
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
// Copyright 2010 by Tor Olav Kristensen, except for the textures
// Email: t o r . o l a v . k [_A_T_] g m a i l . c o m
// http://subcube.com
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
#version 3.6;
#include "colors.inc"
#include "rad_def.inc"
#include "shapes.inc" // For Supertorus() macro
//#include "transforms.inc" // For Shear_Trans() macro
global_settings {
radiosity { Rad_Settings(Radiosity_OutdoorHQ, on, off) }
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
#macro ShearTrans(vA, vB, vC)
#if (vdot(vA, vcross(vB, vC)) = 0)
#error "Bad vectors passed to ShearTrans macro"
#else
transform {
matrix <
vA.x, vA.y, vA.z,
vB.x, vB.y, vB.z,
vC.x, vC.y, vC.z,
0, 0, 0
>
}
#end // if
#end // macro ShearTrans
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
// Modified versions of a texture once made by Gilles Tran
// His website is here: http://www.oyonale.com
#declare Gilles_Tex_Mod1 =
texture {
pigment {
bozo
color_map {
[ 0 color White*0.7 ]
[ 1 color White*1.1 ]
}
}
normal {
agate 0.3
scale <1, 1, 1>*1.6
}
finish {
ambient color Black
diffuse 0.8
specular 0.1
roughness 0.1
metallic
brilliance 1
}
scale <1, 1, 1>*1.6
}
#declare Gilles_Tex_Mod2 =
texture {
pigment {
crackle solid
color_map {
[ 0 color White*0.5 ]
[ 1 color White*0.9 ]
}
}
normal {
granite 0.9
scale <1, 1, 1>*3
}
finish {
ambient color Black
diffuse 0.8
specular 0.1
roughness 0.1
metallic
brilliance 1
}
scale <1, 1, 1>*1.6
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
#declare Rmaj = 4.0;
#declare Rmin = 1.0;
#declare Cmaj = 1/2;
#declare Cmin = 1/2;
#declare Acc = 1e-3;
#declare MaxGrad = 1.0;
#declare S_Torus = Supertorus(Rmaj, Rmin, Cmaj, Cmin, Acc, MaxGrad)
#declare S = 1.0; // Amount of shearing
#declare Rbig = Rmaj + Rmin;
#declare T = 2*Rbig;
#declare D = 3*Rbig;
#declare ZZ =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
< 0, +1, 0>,
< 0, 0, +1>
)
translate < 0, 0, 0>
}
#declare PZ =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
<+S, +1, 0>,
< 0, 0, +1>
)
translate <+T, 0, 0>
}
#declare MZ =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
<-S, +1, 0>,
< 0, 0, +1>
)
translate <-T, 0, 0>
}
#declare ZP =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
< 0, +1, +S>,
< 0, 0, +1>
)
translate < 0, 0, +T>
}
#declare ZM =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
< 0, +1, -S>,
< 0, 0, +1>
)
translate < 0, 0, -T>
}
#declare PP =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
<+S, +1, +S>,
< 0, 0, +1>
)
translate <+T, 0, +T>
}
#declare MP =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
<-S, +1, +S>,
< 0, 0, +1>
)
translate <-T, 0, +T>
}
#declare MM =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
<-S, +1, -S>,
< 0, 0, +1>
)
translate <-T, 0, -T>
}
#declare PM =
object {
S_Torus
ShearTrans(
<+1, 0, 0>,
<+S, +1, -S>,
< 0, 0, +1>
)
translate <+T, 0, -T>
}
#declare Wall1 =
union {
object { ZZ }
object { PZ }
object { MZ }
object { ZP }
object { ZM }
object { PP }
object { MP }
object { MM }
object { PM }
}
#declare Wall2 =
union {
// object { ZZ }
object { PZ }
object { MZ }
object { ZP }
object { ZM }
object { PP }
object { MP }
object { MM }
object { PM }
}
union {
// PosY
object {
Wall1
rotate 0*z
translate +D*y
}
// NegY
object {
Wall1
rotate 180*z
translate -D*y
}
// NegX
object {
Wall1
rotate +90*z
translate -D*x
}
// PosX
object {
Wall2
rotate -90*z
translate +D*x
}
// NegZ
object {
Wall1
rotate -90*x
translate -D*z
}
// PosZ
object {
Wall1
rotate +90*x
translate +D*z
}
texture { Gilles_Tex_Mod1 }
// pigment { color White }
}
object {
ZZ
texture { Gilles_Tex_Mod1 }
// pigment { color White }
rotate 30*y
translate (T + D)*x
translate -D*y
}
plane {
y, -(D + S)
texture { Gilles_Tex_Mod2 }
// pigment { color White }
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
sky_sphere {
pigment {
gradient y
color_map {
[ 0 White ]
[ 1 rgb <0.25, 0.46, 0.80>*0.9 ]
}
}
}
light_source {
<4, 3, 4>*30
color rgb <0.76, 0.62, 0.34>
area_light
2*x, 2*z,
4, 4
circular
orient
adaptive 1
jitter
}
/*
light_source {
<4, 3, 4>*30
color White
// shadowless
}
*/
camera {
location <5, 4, -6>*10
look_at <-8, 0, -8>
angle 70
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
Post a reply to this message
|
|
|
|
Tor Olav Kristensen wrote:
>
> Below is the source code for the image I posted here:
>
> http://news.povray.org/povray.binaries.images/message/<4b5a4460%40news.povray.org>
>
> Newsgroup: povray.binaries.images
> Date: 23rd January 2010
> Subject: Sheared supertori
And here is some alternative source code that will produce the same
(or a very similar) image.
In this version matrices are used to do all the shears, reorientations
and translations.
Tor Olav
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
// Copyright 2010 by Tor Olav Kristensen, except for the textures
// Email: t o r . o l a v . k [_A_T_] g m a i l . c o m
// http://subcube.com
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
#version 3.6;
#include "colors.inc"
#include "rad_def.inc"
//#include "shapes.inc" // For Supertorus() macro
//#include "transforms.inc" // For Matrix_Trans() macro
global_settings {
radiosity { Rad_Settings(Radiosity_OutdoorHQ, on, off) }
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
#macro SuperTorusFunction(RadMaj, RadMin, CtrlMaj, CtrlMin)
#local SuperCylFn =
function(_a, _b, _r, _p) {
pow(pow(abs(_a), _p) + pow(abs(_b), _p), 1/_p) - _r
}
#local PwrMin = 2/CtrlMin;
#local PwrMaj = 2/CtrlMaj;
function {
SuperCylFn(SuperCylFn(x, z, RadMaj, PwrMaj), y, RadMin, PwrMin)
}
#end // macro SuperTorusFunction
#macro SuperTorus(RadMaj, RadMin, CtrlMaj, CtrlMin, Accuracy, MaxGradient)
#local RadBig = RadMaj + RadMin;
isosurface {
SuperTorusFunction(RadMaj, RadMin, CtrlMaj, CtrlMin)
threshold 0
contained_by {
box {
-<RadBig, RadMin, RadBig>,
+<RadBig, RadMin, RadBig>
}
}
max_gradient MaxGradient
accuracy Accuracy
}
#end // macro SuperTorus
#macro MatrixTrans(vA, vB, vC, vD)
#if (vdot(vA, vcross(vB, vC)) = 0)
#error "Bad vectors passed to MatrixTrans macro"
#else
transform {
matrix <
vA.x, vA.y, vA.z,
vB.x, vB.y, vB.z,
vC.x, vC.y, vC.z,
vD.x, vD.y, vD.z
>
}
#end // if
#end // macro MatrixTrans
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
// Modified versions of a texture once made by Gilles Tran
// His website is here: http://www.oyonale.com
#declare Gilles_Tex_Mod1 =
texture {
pigment {
bozo
color_map {
[ 0 color White*0.7 ]
[ 1 color White*1.1 ]
}
}
normal {
agate 0.3
scale <1, 1, 1>*1.6
}
finish {
ambient color Black
diffuse 0.8
specular 0.1
roughness 0.1
metallic
brilliance 1
}
scale <1, 1, 1>*1.6
}
#declare Gilles_Tex_Mod2 =
texture {
pigment {
crackle solid
color_map {
[ 0 color White*0.5 ]
[ 1 color White*0.9 ]
}
}
normal {
granite 0.9
scale <1, 1, 1>*3
}
finish {
ambient color Black
diffuse 0.8
specular 0.1
roughness 0.1
metallic
brilliance 1
}
scale <1, 1, 1>*1.6
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
#declare Rmaj = 4.0;
#declare Rmin = 1.0;
#declare Cmaj = 1/2;
#declare Cmin = 1/2;
#declare Acc = 1e-3;
#declare MaxGrad = 1.0;
#declare S_Torus = SuperTorus(Rmaj, Rmin, Cmaj, Cmin, Acc, MaxGrad)
#declare S = 1.0; // Amount of shearing
#declare Rbig = Rmaj + Rmin;
#declare T = 2*Rbig;
#declare D = 3*Rbig;
// rotate 0*z
#declare PosY =
union {
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, +1, 0>,
< 0, 0, +1>,
< 0, +D, 0>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, +1, 0>,
< 0, 0, +1>,
<+T, +D, 0>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, +1, 0>,
< 0, 0, +1>,
<-T, +D, 0>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, +1, +S>,
< 0, 0, +1>,
< 0, +D, +T>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, +1, -S>,
< 0, 0, +1>,
< 0, +D, -T>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, +1, +S>,
< 0, 0, +1>,
<+T, +D, +T>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, +1, +S>,
< 0, 0, +1>,
<-T, +D, +T>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, +1, -S>,
< 0, 0, +1>,
<-T, +D, -T>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, +1, -S>,
< 0, 0, +1>,
<+T, +D, -T>
)
}
}
// rotate 180*z
#declare NegY =
union {
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
< 0, -1, 0>,
< 0, 0, +1>,
< 0, -D, 0>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
<-S, -1, 0>,
< 0, 0, +1>,
<-T, -D, 0>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
<+S, -1, 0>,
< 0, 0, +1>,
<+T, -D, 0>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
< 0, -1, +S>,
< 0, 0, +1>,
< 0, -D, +T>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
< 0, -1, -S>,
< 0, 0, +1>,
< 0, -D, -T>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
<-S, -1, +S>,
< 0, 0, +1>,
<-T, -D, +T>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
<+S, -1, +S>,
< 0, 0, +1>,
<+T, -D, +T>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
<+S, -1, -S>,
< 0, 0, +1>,
<+T, -D, -T>
)
}
object {
S_Torus
MatrixTrans(
<-1, 0, 0>,
<-S, -1, -S>,
< 0, 0, +1>,
<-T, -D, -T>
)
}
}
// rotate 90*z
#declare NegX =
union {
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, 0, 0>,
< 0, 0, +1>,
<-D, 0, 0>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, +S, 0>,
< 0, 0, +1>,
<-D, +T, 0>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, -S, 0>,
< 0, 0, +1>,
<-D, -T, 0>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, 0, +S>,
< 0, 0, +1>,
<-D, 0, +T>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, 0, -S>,
< 0, 0, +1>,
<-D, 0, -T>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, +S, +S>,
< 0, 0, +1>,
<-D, +T, +T>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, -S, +S>,
< 0, 0, +1>,
<-D, -T, +T>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, -S, -S>,
< 0, 0, +1>,
<-D, -T, -T>
)
}
object {
S_Torus
MatrixTrans(
< 0, +1, 0>,
<-1, +S, -S>,
< 0, 0, +1>,
<-D, +T, -T>
)
}
}
// rotate -90*z
#declare PosX =
union {
/*
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, 0, 0>,
< 0, 0, +1>,
<+D, 0, 0>
)
}
*/
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, -S, 0>,
< 0, 0, +1>,
<+D, -T, 0>
)
}
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, +S, 0>,
< 0, 0, +1>,
<+D, +T, 0>
)
}
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, 0, +S>,
< 0, 0, +1>,
<+D, 0, +T>
)
}
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, 0, -S>,
< 0, 0, +1>,
<+D, 0, -T>
)
}
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, -S, +S>,
< 0, 0, +1>,
<+D, -T, +T>
)
}
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, +S, +S>,
< 0, 0, +1>,
<+D, +T, +T>
)
}
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, +S, -S>,
< 0, 0, +1>,
<+D, +T, -T>
)
}
object {
S_Torus
MatrixTrans(
< 0, -1, 0>,
<+1, -S, -S>,
< 0, 0, +1>,
<+D, -T, -T>
)
}
}
// rotate -90*x
#declare NegZ =
union {
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, 0, -1>,
< 0, +1, 0>,
< 0, 0, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, 0, +1>,
< 0, +1, 0>,
<+T, 0, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, 0, +1>,
< 0, +1, 0>,
<-T, 0, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, -S, +1>,
< 0, +1, 0>,
< 0, +T, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, +S, +1>,
< 0, +1, 0>,
< 0, -T, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, -S, +1>,
< 0, +1, 0>,
<+T, +T, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, -S, +1>,
< 0, +1, 0>,
<-T, +T, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, +S, +1>,
< 0, +1, 0>,
<-T, -T, -D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, +S, +1>,
< 0, +1, 0>,
<+T, -T, -D>
)
}
}
// rotate 90*x
#declare PosZ =
union {
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, 0, +1>,
< 0, -1, 0>,
< 0, 0, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, 0, +1>,
< 0, -1, 0>,
<+T, 0, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, 0, +1>,
< 0, -1, 0>,
<-T, 0, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, -S, +1>,
< 0, -1, 0>,
< 0, -T, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
< 0, +S, +1>,
< 0, -1, 0>,
< 0, +T, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, -S, +1>,
< 0, -1, 0>,
<+T, -T, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, -S, +1>,
< 0, -1, 0>,
<-T, -T, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<-S, +S, +1>,
< 0, -1, 0>,
<-T, +T, +D>
)
}
object {
S_Torus
MatrixTrans(
<+1, 0, 0>,
<+S, +S, +1>,
< 0, -1, 0>,
<+T, +T, +D>
)
}
}
union {
object { NegX }
object { PosX }
object { NegY }
object { PosY }
object { NegZ }
object { PosZ }
texture { Gilles_Tex_Mod1 }
// pigment { color White }
}
object {
S_Torus
texture { Gilles_Tex_Mod1 }
// pigment { color White*0.7 }
rotate 30*y
translate (T + D)*x - D*y
}
plane {
y, -16
texture { Gilles_Tex_Mod2 }
// pigment { color White }
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
sky_sphere {
pigment {
gradient y
color_map {
[ 0 White ]
[ 1 rgb <0.25, 0.46, 0.80>*0.9 ]
}
}
}
light_source {
<4, 3, 4>*30
color rgb <0.76, 0.62, 0.34>
area_light
2*x, 2*z,
4, 4
circular
orient
adaptive 1
jitter
}
/*
light_source {
<4, 3, 4>*30
color White
// shadowless
}
*/
camera {
location <5, 4, -6>*10
look_at <-8, 0, -8>
angle 70
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
Post a reply to this message
|
|