|
|
"John VanSickle" <van### [at] erolscom> schrieb im Newsbeitrag
news:38F7AD64.EA2CC6FF@erols.com...
> >
> > Hi !
> >
> > how can I render implicit and parametric surfaces with povray
without
> > using any external programs ?
>
> I use pencil and paper.
and how many triangles can you draw per hour ? (SCNR)
> > I have tried to make lots of smooth_triangles with some macros, but
> > you can clearly see the edges of these triangles (ugly).
> >
> > Any hints ?
>
> Use smaller triangles.
I don't think that this is the problem. It must be something else. Apart
from that, I don't
want to calculate the derivatives used to form the normals by hand.
Below is my attempt to create the sombrero as a mesh of
smooth_triangles. Perhaps someone can find the problem.
Achim
<snip--->
global_settings { assumed_gamma 1.0 }
camera
{
location <2, 2, -2>
look_at <0, 0, 0>
}
background { color rgb <0, 0, 0> }
light_source { <20, 20, -10> colour 1 }
// ------------------------------------------------------------------
// Set up the loop variables:
// the xc & zc variables will go from -1.0 to +1.0
// in NumIterations loops.
#declare NumIterations = 10; // try 6 to 16
#declare Increment = 1.0/(NumIterations*2);
#declare yStretch = 0.25;
//#declare pi = 3.141592653589793238462643383279502884197169399375105820975;
//helper functions
#macro function(px, pz)
(sin(sqrt(px*px+pz*pz)*4*pi))
#end
#macro dfdx(px, pz)
(px*cos(sqrt(px*px+pz*pz)*4*pi)/(2*sqrt(px*px+pz*pz)))
#end
#macro dfdz(px, pz)
(pz*cos(sqrt(px*px+pz*pz)*4*pi)/(2*sqrt(px*px+pz*pz)))
#end
#macro tangentx(px, pz)
(<1.0, dfdx(px, pz), 0.0>)
#end
#macro tangentz(px, pz)
(<0.0, dfdz(px, pz), 1.0>)
#end
#macro normalxz(px, pz)
(vcross(tangentx(px, pz), tangentz(px, pz)))
#end
#macro MakeQuad(px, pz)
// #debug concat("quad (", str(px, 0, 3), "/", str(py, 0, 3), "/", str(pz, 0, 3), ") ,
(", str(px + Increment, 0, 3), "/", str(py
, 0, 3), "/", str(pz + Increment, 0, 3), ")\n")
smooth_triangle
{
<px, yStretch*function(px, pz), pz>,
normalxz(px, pz)
<px + Increment, yStretch*function(px + Increment, pz), pz>,
normalxz(px + Increment, pz)
<px, yStretch*function(px, pz + Increment), pz + Increment>
normalxz(px, pz + Increment)
}
smooth_triangle
{
<px, yStretch*function(px, pz + Increment), pz + Increment>,
normalxz(px, pz + Increment)
<px + Increment, yStretch*function(px + Increment, pz), pz>,
normalxz(px + Increment, pz)
<px + Increment, yStretch*function(px + Increment, pz + Increment), pz
+ Increment>
normalxz(px + Increment, pz + Increment)
}
#end
mesh
{
#declare zc = -1.0;
#while (zc < 1.0)
#declare xc = -1.0;
#while (xc < 1.0)
MakeQuad(xc, zc)
#declare xc = xc + Increment;
#end
#declare zc = zc + Increment;
#end
texture
{
pigment
{
color rgb <1, 0, 0>
}
finish
{
ambient 0.2 specular 0.7 roughness 0.05 reflection 0.3
}
}
}
<snip--->
Post a reply to this message
|
|