- 博客(8)
- 收藏
- 关注
原创 C#+VTK三维开发:贴图颜色太暗怎么办?场景灯光的几种设置方法
有很多朋友在使用vtk绘制三维场景时,从来不去管灯光,也没添加过任何灯光,觉得还过得去。但有时加上灯光,会产生不一样的效果,比如下面这张图是没有添加任何灯光效果的虚拟地球。vtkLight是有方向,有很多不同的设置,也可以设置环境光颜色,漫反射颜色,镜面反射颜色等。至此,我们还没有把光加上,为了体现光的效果,我们把环境光和漫反射都先去掉。我们在遥远的地球之外,添加一个光源,代码如下。这是我们看到的地球就太恐怖了,变成了红色的地球!其实可以尝试不同的取值组合,得到希望达到的效果。我们看到地球的一半都黑了!
2025-02-18 22:48:45
259
原创 C#+VTK三维开发:在3D场景中固定位置添加和更新2D文字信息的切实可行的方法
这里有两个点要注意,其中XVertex就是一个二维的位置,自定义的,不重要,但是它的值是一个归一化的坐标,代表在窗口中的相对位置,窗口纵横坐标范围都被想象成0~1,左下角为(0,0),所以例子中给出的例子就是,大概在接近左下角的地方放文字。逐行都有注释,相信大家很容易理解,这里的核心是建立一个类型为vtkActor2D的对象实例,其绑定一个vtkTextMapper的实例,然后这个mapper可以设置字体形式和显示内容。字体形式还是可以设置很多内容的。修改完了,一定要调用Render函数完成重绘。
2025-02-18 09:03:05
699
原创 C#+VTK三维开发:给几何体附上颜色的两种方法
这里面关键的对象就是vtkUnsignedCharArray类的这个colorArray变量,它其实就是给每个点一个有三个char构成的标量,然后用polyData.GetPointData().SetScalars(colorArray);上述方法有个小问题,就是所有对象都变成一样颜色了。一个最简单的方法就是在vtkActor这个层次,一次性给这个actor里所有对象(包括顶点、线和面)附上颜色。其中color就是C#的Color对象,它的RGB都是0~255的数字,需要除以255转成0~1的数字。
2025-02-16 21:04:21
315
原创 C#+VTK三维开发:快速生成大量球体Sphere的三种方法(之三)
在之二方法中,我们用了vtkAppendPolyData来生成单个vtkActor,在有些情况下,其实我们只是想生成大量的点,很小的点,无尺度的点,比如说三维点云中的点而已。或者说就是一个像素,那么就完全没有必要使用SphereSource这种球了,直接上像素点云!对了,这里的BuildActor实际就是一个自定义的函数,大概是这样的。用这种方法可以生成上千万个点,都没问题,浏览起来很smooth!后面的博客里,博主会上传源代码,请持续关注本人的博客!
2025-02-14 23:28:26
232
原创 C#+VTK三维开发:快速生成大量球体Sphere的三种方法(之二)
现在介绍第二种方法,就是不管要生成多少个球体,都只生成一个vtkActor,而把所有的球体的vtkPolyData都集成为一个,这个思路非常棒!看到了,这里面的关键对象是vtkAppendPolyData,它不断的Append polydata,最后赋给一个mapper和actor!用这种方法,可以非常快速的生成大量的球,但也有一点,就是大概只能生成几万个,再多的可能也就不太行了,当然,毕竟在实际应用中几万个也差不多了!对了,这里面的X3DVertex是个自定义的对象,就是三维坐标而已!
2025-02-14 23:15:51
583
原创 C#+VTK三维开发:快速生成大量球体Sphere的三种方法(之一)
我们知道,通过在场景中增加vtkActor,可以添加各种三维几何体,但如何实现高效的生成vtkActor,并实现快速场景绘制和浏览,则需要很多技巧,我们以球体(点)生成为例,给大家介绍几种生成方法,以下为第一种,直接基于单个位置,生成一个独立的vtkActor。先建立一个全局唯一的SphereSource,大家都可以用,像孙悟空72变一样,其它球都从它变出来,这样就省内存了。要是按照这个方法,生成100个球,那生成速度和浏览速度都非常慢,非常卡。后面的博客里,博主会上传源代码,请持续关注本人的博客!
2025-02-14 22:54:31
284
原创 C#+VTK三维开发:如何关闭vtk自动弹出的错误窗口
在C#中通过引用vtk的.net版本,也就是ActiViz.net,可以实现桌面三维应用程序开发,比如下面这个博主开发的类似谷歌地球的小应用。在此开发过程中,遇到了各种各样的问题,现在分享给大家。用于.net版的vtk内核还是C++的,很多东西超出控制,比如说,当vtk遇到错误时,就会额外弹出一个小窗口,而且这个窗口的内容和出现方式,是我们无法控制的。当然,这其实是一种掩耳盗铃的做法,出了这种错误,不是隐藏这个报错窗口就完事大吉了,应该由我们自己的程序来接管,这就是第二步要做的事情了。
2025-02-14 22:31:39
175
原创 C#+VTK三维开发:实现事件响应回调函数切实可行的方法!千万不要使用vtkCommand或者它的子类!!
利用vtk(ActiViz.Net)+C#开发了一个虚拟地球,在开发过程中,踩坑不断,而网上的解决方案基本上都是抄来抄去,大部分不管用,读起来令人恼火!!我会在今后的文章中不断分享经实践成功的方法。
2025-02-14 00:09:22
1772
vtkCommand的EventIDs的枚举值
2025-02-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人