Re: Why aren't both sides of a surface equally
- To: mathgroup at smc.vnet.net
- Subject: [mg81040] Re: Why aren't both sides of a surface equally
- From: "David Park" <djmpark at comcast.net>
- Date: Sun, 9 Sep 2007 06:10:42 -0400 (EDT)
- References: <200709060938.FAA15758@smc.vnet.net> <fbqr1t$7n7$1@smc.vnet.net>
Many thanks Chris for the explanation and solution. That indeed did solve the problem. In my actual case I was writing Text3D characters on the inside and outside of the cylinder and then rotating it and I wanted the characters to be quite close to the surface. -- David Park djmpark at comcast.net http://home.comcast.net/~djmpark/ "Chris Hill" <chill at wolfram.com> wrote in message news:fbqr1t$7n7$1 at smc.vnet.net... > At 04:38 AM 9/6/2007, David Park wrote: >>The following illustrates a strange behavior of surfaces with respect to >>opacity. The code draws a narrow cylinder with a red line on the inside of >>the cylinder and a black line on the outside of the cylinder. The cylinder >>is completely opaque. The inside red line does not show through the >>cylinder, which is proper behavior. However, the black outside line does >>show through the back face for a considerable range, which is certainly >>improper behavior. >> >>cylinder = >> First[ParametricPlot3D[{5 Cos[\[Theta]1], 5 Sin[\[Theta]1], >> z}, {\[Theta]1, 0, 2 \[Pi]}, {z, -1, 1}, >> PlotStyle -> {FaceForm[Orange, LightGray]}, >> PlotPoints -> {41, 5}, >> Mesh -> None]]; >> >>outsideline = >> First[ParametricPlot3D[{5.1 Cos[\[Theta]1], 5.1 Sin[\[Theta]1], >> 0.2}, {\[Theta]1, 0, 2 \[Pi]}, >> PlotStyle -> {Black}, >> PlotPoints -> 41]]; >> >>insideline = >> First[ParametricPlot3D[{4.9 Cos[\[Theta]1], >> 4.9 Sin[\[Theta]1], -0.2}, {\[Theta]1, 0, 2 \[Pi]}, >> PlotStyle -> {Red}, >> PlotPoints -> 41]]; >> >>Show[Graphics3D[ >> {cylinder, >> outsideline, >> insideline}], >> Lighting -> "Neutral", >> ViewPoint -> {1.718, -2.747, 0.975}, >> Boxed -> False > > As part of the default hidden surface removal algorithm, Mathematica > pushes lines towards the viewer to achieve the correct > sorting. Given a polygon and a line which are coplanar and > overlapping this makes the line draw consistently in front of the > polygon as is expected. In some cases such the one you've > discovered, this can also incorrectly make lines that are behind > polygons appear to be in front. > > The problem is not related to the sides of the surface. The black > line happens to poke though the cylinder when it passes behind the > cylinder at the part of the cylinder that is most distant from the > view point (the red line passes behind the cylinder closer to the > view point). Inaccuracies of this nature are more likely to be > observed at a greater distance from the view point all other things > being equal. > > One way to avoid the problem you have encountered is to introduce > transparency which causes Mathematica to automatically use a > different hidden surface removal algorithm that is slower and > consumes more memory but that better handles cases like this. Here I > use Opacity[0.999] which is enough transparency to trigger a change > in the hidden surface algorithm, but not so much as to make objects > in the scene appear transparent. > > Show[Graphics3D[{Opacity[0.999], cylinder, outsideline, insideline}], > Lighting -> "Neutral", ViewPoint -> {1.718, -2.747, 0.975}, Boxed -> > False] > > Chris Hill > Wolfram Research > >
- References:
- Why aren't both sides of a surface equally opaque?
- From: "David Park" <djmpark@comcast.net>
- Why aren't both sides of a surface equally opaque?