POV-Ray : Newsgroups : povray.general : Bugs? Torus and SOR Tutorials : Bugs? Torus and SOR Tutorials Server Time
5 Aug 2024 22:21:18 EDT (-0400)
  Bugs? Torus and SOR Tutorials  
From: Jenni A M  Merrifield
Date: 16 Jul 2002 00:49:36
Message: <3d33a5e0@news.povray.org>
Hi, I'm a "newbie user" of POV so the first thing I guess I'll do is say
"Hi!"  I've always wanted to try 3D Rendering and if I'd had any idea there
was a free ray-tracer out there prior to last week I would have been doing
it a lot sooner.  Now I just have to figure out how to turn off the ideas in
my head while I'm at work so I can actually get something done... ;-)

  In any case, because I'm new, I've been going through the beginner
tutorial and I think I may have found a couple of bugs/errors -- one in the
torus section of the tutorial and one in the SOR section.

  Actually, I understand that the Surface of Revolution tutorial issue has
already been posted here once -- you see, I made the very *egregious* error
of not reading everything in the FAQ group and so I managed to overlook both
copies of the "bug reporting" post.  This, of course, means I attempted to
post a bug report to the bugreport group, and the moderator of that group
explained what I should have done and mentioned the previous thread
regarding the SOR bug --However, I can't seem to find the previous thread
(perhaps it's been deleted already, I don't know -- the earliest item
LookOut ... er... Outlook Express loaded in this group is dated as of July
10th) which means that I don't know what the technical details were, and
since it could have been different than my system I think that, perhaps, it
would be best to provide a report on that bug as well (but I'll do it
second, so you can skip it easily if you want! :-D).

*****************************************
Technical Details:
- POV-RAY v3.5 for Windows
- Windows XP Professional (v 5.1.2600 Build 2600)
- Intel Celeron processor, 367 MHz
- 256 MB RAM

*****************************************
Torus Tutorial:

  If you follow the steps given for the torus demo exactly, adding, removing
and changing things as specified, the script you end up with displays a
green link chain rather than the golden chain that is expected.  This, it
seems, is because, at the point where the script is modified to create a
"chain link" by making a union of the chain segments and half-tori and
applying the "Chain_Gold" texture declaration to it, the pigment entries in
the original "Half_Torus" and "Chain_Segment" declarations, which are still
in place, are being used instead of the "Chain_Gold" texture applied to the
union.

  Now the above, of course, assumes that the fact that the "Chain_Gold"
texture definition isn't over-riding the "Green" pigment definition of the
base items is a bug.  It did occur to me that, perhaps, this behavour was
"by design" -- in which case the "bug" is in the tutorial itself which
should expliticly specify that the pigment entries in the "Half_Torus" and
"Chain_Segment" declarations should be removed.  However, given the help
file description of "Layered Textures" though, my original expectation that
a non-transparent texture applied to a union of objects later would
completely blanket any previously assigned pigment or texture, while a
transparent one would allow parts of the previous colour to show through.

  Here is the script from the tutorial which produces a green chain instead
of a gold one for me:

*****
  #include "colors.inc"
  camera {
    location <0, .1, -25>
    look_at 0
    angle 30
  }
  background { color Gray50 }
  light_source{ <300, 300, -1000> White }
  #declare Half_Torus = difference {
    torus {
      4,1
      sturm
      rotate x*-90  // so we can see it from the top
    }
    box { <-5, -5, -1>, <5, 0, 1> }
    pigment { Green }         // <---- GREEN PIGMENT on Half_Torus
  }

  #declare Chain_Segment = cylinder {
    <0, 4, 0>, <0, -4, 0>, 1
    pigment { Green }         // <---- GREEN PIGMENT on Chain_Segment
  }

  #declare Flip_It_Over = x*180;
  #declare Torus_Translate = 8;

  #declare Chain_Gold = texture {
    pigment { BrightGold }
    finish {
      ambient .1
      diffuse .4
      reflection .25
      specular 1
      metallic
    }
  }

  #declare Link = union {
    object {
      Half_Torus
      translate y*Torus_Translate/2
    }
    object {
      Half_Torus
      rotate Flip_It_Over
      translate -y*Torus_Translate/2
    }
    object {
      Chain_Segment
      translate x*Torus_Translate/2
    }
    object {
      Chain_Segment
      translate -x*Torus_Translate/2
    }
    texture { Chain_Gold }         // <---- GOLD TEXTURE on Link
  }

  #declare Link_Translate = Torus_Translate*2-2*y;

  #declare Link_Pair =
  union {
    object { Link }
    object { Link translate y*Link_Translate rotate y*90 }
  }

  #declare Chain = union {
    object { Link_Pair}
    object { Link_Pair translate  y*Link_Translate*2 }
    object { Link_Pair translate  y*Link_Translate*4 }
    object { Link_Pair translate  y*Link_Translate*6 }
    object { Link_Pair translate -y*Link_Translate*2 }
    object { Link_Pair translate -y*Link_Translate*4 }
    object { Link_Pair translate -y*Link_Translate*6 }
  }

  object { Chain scale .1 rotate <0, 45, -45> }
*****

*****************************************
SOR Tutorial:

  Since this has apparently been addressed before, I'll keep it short. :-)

  Basic problem -- when attempting to render the SOR from the tutorial,
instead of showing the hollow interior of the cup, ready to hold your best
mead, the cup is sealed off with a flat cap.  The proper cup, however, could
be generated using the same set of points in the lathe command with a
cubic_spline.

  If a Surface of Rotation is supposed to have a cap, then the image in the
tutorial is wrong.  On the other hand, if it's not supposed to be capped,
then there would appear to be a bug in the program.

  Here's a script I created which compares the SOR and lathe renderings of
the gold cup from the tutorial. It also contains 'rods' that hover just over
the mouth of each cup to show, by shadow and reflection, that the SOR cup is
definitely "capped" while the lathe cup is not.

*****
  #include "colors.inc"
  #include "golds.inc"

  global_settings { assumed_gamma 2.2 }

  camera {
    location <0, 20, -26>
    look_at <0, 5, 0>
    angle 45
  }

  background { color rgb<0.2, 0.4, 0.8>  }

  light_source { <100, 100, -101> color rgb 1 }

  plane {
    y, 0
    pigment { checker color Red, color Green scale 5 }
  }

 // declare a text object to identify the Surface of Revolution
 #declare SOR = text {
    ttf "Arial.ttf" "sor" .1, 0
    pigment { Black }
    finish { specular 1 }
    scale 2
  }

 // calculate the x-length of SOR
  #declare LEN_SOR = x*(max_extent(SOR)-min_extent(SOR));

 // declare a text object to identify the Lathe object
  #declare LATHE = text {
    ttf "Arial.ttf" "lathe" .1, 0
    pigment { Black }
    finish { specular 1 }
    scale 2
  }

 // calculate the x-length of LATHE
  #declare LEN_LATHE = x*(max_extent(LATHE)-min_extent(LATHE));


  // declare a shape that can be used to show reflective properties
  #declare ROD = cylinder {
    < 0, 11,-4>, < 0, 10.7, 4>, 0.25
     pigment { NeonPink }
     finish { phong 1 }
  }


 // create the cup, using SOR, and union with the SOR and ROD objects
 union {
   sor {
     8,
     <0.0,  -0.5>,
     <3.0,   0.0>,
     <1.0,   0.2>,
     <0.5,   0.4>,
     <0.5,   4.0>,
     <1.0,   5.0>,
     <3.0,  10.0>,
     <4.0,  11.0>
     texture { T_Gold_1B }
   }
   object {
    SOR
     translate -x*LEN_SOR/2  // center the word on the cup
     translate y* 0.2     // Move the word up so it will rest on top of the
base of the cup
     translate z*-2.5     // move the word forward slightly
  }
   object { ROD }
    translate -x*5       // move the whole union 5 units in the negative x
direction
 }

 // create the cup, using Lathe, and union with the LATHE and ROD objects
 union {
   lathe {
     cubic_spline
     8,
     <0.0,  -0.5>,
     <3.0,   0.0>,
     <1.0,   0.2>,
     <0.5,   0.4>,
     <0.5,   4.0>,
     <1.0,   5.0>,
     <3.0,  10.0>,
     <4.0,  11.0>
     texture { T_Gold_1B }
   }
   object {
    LATHE
     translate -x*LEN_LATHE/2 // center the word on the cup
     translate y* 0.2     // Move the word up so it will rest on top of the
base of the cup
     translate z*-2.5     // move the word forward slightly
  }
   object { ROD }
    translate x*5        // move the whole union 5 units in the positive x
direction
}
*****

  Thanks for your time. :-)

Jenni A.M. Merrifield
-=> strawberryJAMM <=-


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.