我有一个3D Modell的房子,屋顶是看不见的,所以可以看到房间 (如here)
但是(现在)我没有纹理,每个表面都有相同的颜色,例如,
var myMaterial = new DiffuseMaterial (new SolidColorBrush(myColor))
如果我在WPF Viewport3D中查看它,我希望能够区分曲面。 例如,我想看看地板何时结束并且墙壁开始。
这应该可以通过点亮对象来实现。我已经尝试过了:
环境光不起作用,因为所有表面看起来都是同色的:
myViewport3D.Children.Add(new ModelVisual3D(){Content = new AmbientLight(Colors.White)})
如果我使用定向光并将其位置固定在移动的相机上,有些表面法线有时几乎垂直于相机/光线,因此几乎是黑色,看起来更不自然。
那么在WPF Viewport3D中区分单色3DObject的表面有什么好方法呢?
在用户“jdv”撰写评论后编辑
答案 0 :(得分:3)
就我个人而言,我发现这可以通过两盏灯的组合来实现“最佳”。
此外,如果曲面法线并不总是正确的,则可以使用第三个光 - 另一个方向光指向第一个光线的相反方向。如果您的法线不正确,这将点亮曲面的背面。
答案 1 :(得分:2)
由于你可以使用2个光源,我会尝试使用昏暗的光线作为环境背景光,并使用稍微强一些的方向光来对比表面。
我不是3D专家,但会这样想:
在黑暗的房间(没有环境光线),使用手电筒(定向灯),您将看到基于表面与手电筒角度的显着差异。添加一些环境光线,随着环境光源变强,这些差异的粗糙程度会降低,直到某个时刻,它会超过手电筒并且所有东西都显得均匀亮起。
祝你好运,希望你能够达到你想要的效果。