如果我理解Mathematica文档是正确的(也没有找到示例)Graphics3D不会产生3D对象的阴影,尽管Graphics3D有一个Lighting->选项。
问题:您是否曾尝试使用阴影制作Mathematica 3D对象?如果是这样,你在Mathematica中解决了这个问题?或者您是否已将图形导出到其他3D(场景图)查看器,例如J-Reality?
答案 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]
当然,您需要确保光源(点,点,方向......)和阴影投影一致。