|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Hi,
I occasionally (usually to feed parameters to CSG macros where) need an
empty object.
(This means that the spatial extension is empty.) Consider the following
approaches:
#declare No_object1 = box {0 0}
#declare No_object2 = intersection {box {0 0} box {1 1}}
#declare No_object3 = quadric {0 0 0 1}
The first is quite fast but actually not correct: The object contains
one point.
It might happen that a stray ray accidentally hits this point, causing
artefacts.
The second remedies the problem, but causes a
Warning: Degenerate CSG bounding box (not used!).
which I dislike for aesthetical reasons. The third, which I currently
use,
is fine. But it has no bounding box either and hence uses as much time
as the second. I might add a bounding box to the third approach, but I
still hope there might be a more elegant solution.
Any suggestions?
Mark Weyer
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Mark Weyer <wey### [at] fregemathematikuni-freiburgde> wrote:
> #declare No_object1 = box {0 0}
> The first is quite fast but actually not correct: The object contains
> one point.
> It might happen that a stray ray accidentally hits this point, causing
> artefacts.
Add "no_image no_reflection no_shadow" to it, so it should be completely
ignored (at least in theory).
--
#macro N(D)#if(D>99)cylinder{M()#local D=div(D,104);M().5,2pigment{rgb M()}}
N(D)#end#end#macro M()<mod(D,13)-6mod(div(D,13)8)-3,10>#end blob{
N(11117333955)N(4254934330)N(3900569407)N(7382340)N(3358)N(970)}// - Warp -
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
> > #declare No_object1 = box {0 0}
>
> Add "no_image no_reflection no_shadow" to it, so it should be completely
> ignored (at least in theory).
Not if used in difference. Or do I get something wrong?
To be more precise:
difference {
box {<-1,-1,0> <1,1,1}
box {0 0 no_image no_reflection no_shadow}
}
I did not try this, but if the stray ray actually hits the 0-box, I think it
would decide not to have hit the surface of the defference yet. Hence
it would continue INSIDE the object.
Mark
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
On Thu, 21 Nov 2002 16:09:02 +0100, Mark Weyer
<wey### [at] fregemathematikuni-freiburgde> wrote:
> Not if used in difference. Or do I get something wrong?
> To be more precise:
> difference {
> box {<-1,-1,0> <1,1,1}
> box {0 0 no_image no_reflection no_shadow}
> }
Do you really need an empty object ? Can't you directly use first box object
then instead of whole difference object ?
ABX
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
> Do you really need an empty object ? Can't you directly use first box object
> then instead of whole difference object ?
It seems I forgot to repeat the following information in my
second post: It need the empty object to feed it as a parameter
to macros using CSG.
Example: I might have a macro for doors. One of its parameters
is the key shape, so I can carve in (using difference) an appropriate
keyhole. Sometimes I might need a door without a keyhole. The I
would feed the empty object for the key shape. Following your idea
I would have to make a second copy of the door macro where I omit
the carving out of the keyhole.
Mark Weyer
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Mark Weyer wrote:
>
> It seems I forgot to repeat the following information in my
> second post: It need the empty object to feed it as a parameter
> to macros using CSG.
If you are not up to maximum speed just use a poly or isosurface with no
solutions...
Christoph
--
POV-Ray tutorials, include files, Sim-POV,
HCR-Edit and more: http://www.tu-bs.de/~y0013390/
Last updated 15 Nov. 2002 _____./\/^>_*_<^\/\.______
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
On Thu, 21 Nov 2002 16:26:12 +0100, Mark Weyer
<wey### [at] fregemathematikuni-freiburgde> wrote:
> > Do you really need an empty object ? Can't you directly use first box object
> > then instead of whole difference object ?
>
> It seems I forgot to repeat the following information in my
> second post: It need the empty object to feed it as a parameter
> to macros using CSG.
I already saw this but I intentionaly provoked you to more precise answer :-)
> Example: I might have a macro for doors. One of its parameters
> is the key shape, so I can carve in (using difference) an appropriate
> keyhole. Sometimes I might need a door without a keyhole. The I
> would feed the empty object for the key shape. Following your idea
> I would have to make a second copy of the door macro where I omit
> the carving out of the keyhole.
There is a lot of ways how you can do this without empty object.
For example:
// indexes to array
#declare DoorsId=0;
#declare KeyholeId=1;
#declare Key=2;
#macro Room(Elements)
#local Door=Elements[DoorsId];
#ifdef(Elements[KeyholeId])
#local Door=intersection{
object{Door}
object{Elements[KeyholeId]}
};
#ifdef(Elements[Key])
#local Door=union{
object{Door}
object{Elements[Key]}
};
#end
#end
#end
ABX
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
> There is a lot of ways how you can do this without empty object.
You are right. But I still prefer the empty-object-method for
some applications, because it is more elegant to my taste.
Mark
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
> If you are not up to maximum speed just use a poly or isosurface with no
> solutions...
In fact, my third approach (quadric {0 0 0 1}) is quite similar.
What is your suggestion for maximum speed?
Mark
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
On Thu, 21 Nov 2002 16:44:51 +0100, Mark Weyer
<wey### [at] fregemathematikuni-freiburgde> wrote:
> > There is a lot of ways how you can do this without empty object.
>
> You are right. But I still prefer the empty-object-method for
> some applications, because it is more elegant to my taste.
Wasting memory for not necessary CSG objects is elegant? I doubt.
ABX
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |