mathematica Graphics3D中的阴影

时间:2011-08-05 11:43:33

标签: wolfram-mathematica 3d

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

问题:您是否曾尝试使用阴影制作Mathematica 3D对象?如果是这样,你在Mathematica中解决了这个问题?或者您是否已将图形导出到其他3D(场景图)查看器,例如J-Reality?

1 个答案:

答案 0 :(得分: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[Darker@Gray], shadow}, 
 Lighting -> {{"Directional", White, {{1, 0, 1}, {0, 0, 0}}}}, 
 Boxed -> False]

enter image description here

当然,您需要确保光源(点,点,方向......)和阴影投影一致。