mathematica Graphics3D中的阴影

nil*_*ock 9 3d wolfram-mathematica

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

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

Sjo*_*ies 14

MMA使用的阴影模型,即所谓的Phong阴影,基于局部表面取向,光源方向,相机方向和表面的漫反射和镜面反射特性之间的简单关系来确定像素强度.没有考虑几何的其他方面,这意味着对象不会影响其他对象的像素值,即使它们位于对象和光源之间.

这意味着模型不会生成阴影.它不能.

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

例:

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]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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