2011-08-05 32 views
9

如果我理解Mathematica文档正确(还没有找到示例),Graphics3D不会产生3D对象的阴影,尽管Graphics3D有一个Lighting->选项。mathematica中的阴影Graphics3D

问题:你有没有试过用阴影产生Mathematica 3D物体?如果是的话,你在Mathematica中解决了这个问题吗?或者,您是否已将图形导出到其他3D(场景图)查看器,例如J-Reality?

+1

据我所知,最简单的解决方案是使用一些外部的raytracer程序,并导出你的几何图形。我使用Kerkythea(易于学习/使用简单的东西,免费软件)做到了这一点。 – Szabolcs

+0

看起来很不错。我目前正在使用舞台/演员/导演架构进行开发,目前舞台是'Graphics3D'。你所想的只适用于一个场景。尽管如此,值得一试,谢谢。 –

回答

14

着色模型used by MMA(所谓的Phong shading)基于局部表面取向,光源方向,相机方向以及表面的漫反射和镜面反射特性之间的简单关系来确定像素强度。没有考虑几何图形的其他方面,这意味着即使物体位于物体和光源之间,物体也不会影响其他物体的像素值。

这意味着该模型不会生成阴影。它无法。

通过将对象的多边形投影到地平面或墙平面上(如适用),您可以自己模拟阴影。这不应该太困难,但非平面表面上的阴影将非常困难。

例子:

polys = (PolyhedronData["GreatRhombicTriacontahedron", "Faces"] // 
     Normal // N) /. {x_, y_, z_}?VectorQ -> {x, y, z + 6}; 
    (* raise it slightly above ground plane*) 

shadow = polys /. {x_, y_, z_}?VectorQ -> {x - z, y, 0}; 
     (* projection from a directional light source at 45 deg elevation *) 

Graphics3D[{polys, EdgeForm[], FaceForm[[email protected]], shadow}, 
Lighting -> {{"Directional", White, {{1, 0, 1}, {0, 0, 0}}}}, 
Boxed -> False] 

enter image description here

当然,你需要确保的是,照明源(点,点,定向...)和你的影子投影是一致的。

+0

看起来不错!但是,嗯......添加阴影=会=很难。无论如何,在我的(即将发布的)应用中。 - 谢谢你的回答。 –