在C#中通过引用vtk的.net版本,也就是ActiViz.net,可以实现桌面三维应用程序开发,比如下面这个博主开发的类似谷歌地球的小应用。在此开发过程中,遇到了各种各样的问题,现在分享给大家。
X3DDemo
后面的博客里,博主会上传源代码,请持续关注本人的博客!!
有很多朋友在使用vtk绘制三维场景时,从来不去管灯光,也没添加过任何灯光,觉得还过得去。但有时加上灯光,会产生不一样的效果,比如下面这张图是没有添加任何灯光效果的虚拟地球
感觉有些太暗淡了,于是我在球体actor上面可以对材质的光泽设置如下:
actor.GetProperty().SetDiffuse(0.7); //设置漫反射的值
actor.GetProperty().SetAmbient(0.3); //设置环境光的值
设置后的效果如下,稍微亮了一点
变化不大,再调一下,把环境光和漫反射都调大一点
actor.GetProperty().SetDiffuse(0.9); //设置漫反射的值
actor.GetProperty().SetAmbient(0.5); //设置环境光的值
这次明显亮了不少
其实可以尝试不同的取值组合,得到希望达到的效果。
至此,我们还没有把光加上,为了体现光的效果,我们把环境光和漫反射都先去掉。我们在遥远的地球之外,添加一个光源,代码如下
// 创建灯光并设置属性
light = vtkLight.New();
light.SetColor(1.0, 1.0, 1.0); // 设置为白色灯光
light.SetPosition(X3DGIS.EarthRadius * 10, X3DGIS.EarthRadius * 10, X3DGIS.EarthRadius * 10); // 设置灯光位置
light.SetFocalPoint(0, 0, 0); // 设置焦点为地球中心
renderer.AddLight(light);
我们看到地球的一半都黑了!像真实的地球一样!
如果我们修改灯光的颜色
light.SetColor(1.0, 0.0, 0.0); // 设置为红色灯光
这是我们看到的地球就太恐怖了,变成了红色的地球!
vtkLight是有方向的,有很多不同的设置,也可以设置环境光颜色,漫反射颜色,镜面反射颜色等。各种组合非常多,可以多多尝试,找到最佳效果!