I have a problem with rendering of Mesh lines on a 3D surface produced by
ContourPlot3D in Mathematica 7.0.1:
p=ContourPlot3D[x^4+y^4+z^4-(x^2+y^2+z^2)^2+3(x^2+y^2+z^2)==3,
{x, -2,2}, {y, -2, 2}, {z,-2,2},
BoundaryStyle->Directive[Black,Thickness[.003]],
ContourStyle->Directive[Orange,Opacity[0.5],Specularity[White,300]],
PlotPoints->90,Ticks->None,
MeshStyle->Directive[GrayLevel[.7],Thickness[.001]],
Lighting->{{"Directional",RGBColor[1,1,1],
{ImageScaled@{1,0,1},ImageScaled@{0,0,0}}}}];
p=Graphics[Inset[p,{0,0},Center,{1,1}],
PlotRange->{{-.5,.5},{-.5,.5}},Frame->True]
(see screenshot here: http://i.stack.imgur.com/zBtYC.png )
Let us to look closer on Mesh lines:
Show[p, PlotRange -> {{-.16, -.05}, {0, .1}}]
(see screenshot here: http://i.stack.imgur.com/JBkcc.png )
You can see that gray Mesh lines are overlapped by surface-forming triangles
in many places and even look dashed. Is there a way to avoid this?
DepthBuffer
Advantage - very fast
Disadvantage - absolutely unusable with transparency
BSPTree
Advantage - renders everything
Disadvantage - divvies up the polygons into a bazillion sub-polygons, which are
reordered during rotation. Most of this happens in the CPU, not the GPU. By
far, the slowest rendering method.
DepthPeeling
Advantage - renders most transparency fine, uses GPU hardware.
Disadvantage - some older video cards don't support it, a few (but rare)
outlying transparent cases don't work well.
V7 only had the first two options. What you're seeing is a complication
stemming from the facts that:
* There's a great deal of polygonal subdividision
* The mesh is also highly subdivided
* The mesh and the polygons are nearly (or sometimes exactly) coplanar polygons
In v7, there are two ways out of this. One is to prevent the BSPTree method
from being used by removing the transparency from the graphic. The second is to
prevent the coplanarity by changing how the mesh is rendered. There's an
undocumented usage of the MeshStyle option which would do this:
MeshStyle -> {{GrayLevel[.7], Tube[0.01]}}
In v8, the DepthPeeling method does a vastly better job with the transparent
version of the graphic. And, if your hardware supports it, DepthPeeling is what
Mathematica will use by default.
Sincerely,
John Fultz
jfu...@wolfram.com
User Interface Group
Wolfram Research, Inc.
The option
MeshStyle -> {{GrayLevel[.7], Tube[0.01]}}
solves the problem with overlapped Mesh lines. Now another problem: FrontEnd
crashes when I add a set of 200 little non-tranparent spheres to the plot. I
am forced to use Spheres instead of Points primarily because Points are not
scaled with distance in 3D.
It seems that the crash happens because the number of 3D-objects becomes
large when Mesh is also rendered as 3D. Crash also happens when I increase
PlotPoints option:
ContourPlot3D[
x^4 + y^4 + z^4 - (x^2 + y^2 + z^2)^2 + 3 (x^2 + y^2 + z^2) ==
3, {x, -2, 2}, {y, -2, 2}, {z, -2, 2},
BoundaryStyle -> Directive[Black, Thickness[.003]],
ContourStyle ->
Directive[Orange, Opacity[0.5], Specularity[White, 300]],
Ticks -> None, PlotPoints -> 60,
MeshStyle -> {{Glow[GrayLevel[.7]], Black, Tube[0.005]}},
Lighting -> {{"Directional",
RGBColor[1, 1, 1], {ImageScaled@{1, 0, 1},
ImageScaled@{0, 0, 0}}}}]
Is there any workaround for this (I need semi-transparent surface)?
(I use Lenove R500 laptop with 32bit Windows XP SP3 installed and
Mathematica 7.0.1.)
Thank you for your help,
Alexey
Graphics3D[Sphere[], Method -> {"SpherePoints" -> 5}]
That example, of course, looks horrible, but if your Sphere[]s are effectively points, nobody will ever notice.
Upgrading to v8 is, of course, an option as well. The DepthPeeling method is
superior for most transparent renderings, and definitely for the example you
included here.
Sincerely,
John Fultz
jfu...@wolfram.com
User Interface Group
Wolfram Research, Inc.
Graphics3D[{Tube[{{0, 0, 0}, {1, 1, 1}}, .25]},
Method -> {"TubePoints" -> {3, 2}}]
Adding both "TubePoints" and "SpherePoints" would, I imagine, make the result considerably more manageable. Furthermore, I don't know how you're adding the Sphere[]s, but I strongly recommend that you use multi-Sphere[]s. I.e.,
(* not this *) {Sphere[p1, r], Sphere[p2, r], ...}
(* but this *) Sphere[{p1, p2, ...}, r]
Sincerely,
John Fultz
jfu...@wolfram.com
User Interface Group
Wolfram Research, Inc.
The Mesh tubes show up in the stl model.
Roger Bagula
For getting color out the web suggests the *.coff
file format: Mathematica gives
Export::infer: "Cannot infer format of file \!\
(\"Ruledellipsedouble_tubelines.coff\"\)."
but will do an *.off file.
Roger Bagula
Also, Tube primitives slow down rendering of plots no end and probably
also use a fair amount of memory. My ByteCount of your plot with Tubes
is at 9.1MB, without Tubes at ~2MB.
Regards,
Yves
There is still the problem of what the printers call:
Non-Manifold
model outputs in Mathematica.
It appears that Mathematica models leave holes
that 3d Printers can't stand. They all have to be repaired
and mesh holes closed.
They all deal with me like I'm the village idiot
for having such bad mesh files, LOL.
Roger Bagula