WPF Viewport3D 中单色 3D 对象的有用照明
-
27-09-2019 - |
题
我有一个3D模型的房子,那里的屋顶是看不见的,以便可以看到房间(就像 这里)
但是(目前)我没有纹理,每个表面都有相同的颜色,例如,
var myMaterial = new DiffuseMaterial (new SolidColorBrush(myColor))
如果我在 WPF Viewport3D 中查看它,我希望能够区分表面。例如,我想看看地板何时结束、墙壁何时开始。
这应该可以通过照亮物体来实现。我已经尝试过:
环境光不起作用,因为所有表面看起来颜色相同:
myViewport3D.Children.Add(new ModelVisual3D(){Content = new AmbientLight(Colors.White)})
如果我使用定向光并将其位置固定在移动的相机上,则某些表面法线有时几乎垂直于相机/光,因此几乎是黑色的,这看起来更不自然。
那么在 WPF Viewport3D 中区分单色 3DObject 的表面的好方法是什么?
在用户“jdv”发表评论后编辑
解决方案
由于可以使用两个光源,我会尝试使用昏暗的灯光以充当环境背景光以及稍强定向光,得到对比的表面上。
我不是3D专家,但会这样想的吧:
在黑暗的房间(没有环境光),用手电筒(定向光),你会看到基于表面的给你的手电筒的角度显着差异。添加一些环境照明和这些差异严酷减小作为环境光源变得更强,直到在某一点,它压倒手电筒和一切出现光线均匀的。
祝你好运,希望你能达到你所追求的效果。
其他提示
就我个人而言,我发现通过组合两种灯可以实现“最佳”效果。
- 昏暗(也许 30% 亮)的环境光。这始终显示所有表面。
- 定向光,大约 80% 白色,跟随相机,但偏离 30 度左右。我发现“相机左肩上方”的光线往往是人们所期望的。
另外,如果表面法线并不总是正确的,您可以使用第三个光源 - 另一个指向与第一个光源相反方向的定向光源。如果法线不合适,这将照亮曲面的背面。
不隶属于 StackOverflow