【发布时间】:2010-10-03 05:46:18
【问题描述】:
我有一个房子的 3D 模型,屋顶是看不见的,所以房间可以看到 (如here)
但是(现在)我没有纹理,每个表面都有相同的颜色,例如,
var myMaterial = new DiffuseMaterial (new SolidColorBrush(myColor))
如果我在 WPF Viewport3D 中查看它,我希望能够区分表面。 例如,我想看看地板何时结束,墙壁何时开始。
这应该可以通过照亮对象来实现。我已经试过了:
环境光不起作用,因为所有表面看起来颜色相同:
myViewport3D.Children.Add(new ModelVisual3D(){Content = new AmbientLight(Colors.White)})
如果我使用定向光并将其位置粘贴到移动的相机上,一些表面法线有时几乎垂直于相机/光,因此几乎是黑色的,这看起来更加不自然。
那么在 WPF Viewport3D 中区分单色 3DObject 表面的好方法是什么?
在用户“jdv”发表评论后编辑
【问题讨论】:
-
您是否可以使用 2 个光源,如果可以,它们是相加的吗?只是想知道同时使用定向光源(根据表面方向提供不同的照明)和环境光源(照亮所有表面)是否可行。
-
我认为你的表面是黑色的原因是因为它们远离光源,而不是因为它们“几乎垂直于相机”。正如漂移指出的那样,2 盏灯应该可以解决这个问题。
-
是的,它们在 WPF 中是附加的。我试过一次,但对结果并不满意。也许我应该利用这些光源的力量。
标签: c# wpf lighting viewport3d