1. 20150504
pvw编译版本Actor调用过程:启动运行,vtkActor.cxx, vtkOpenGLActor(), vtkPVCenterAxesActor(), vtkPVRenderView(), vtkActor.cxx, ……, 对Actor的设置;添加模型,查看Property的设置,vtkProperty.h;测试vtkProperty.h的virtual void SetColor(double r, double g, double b)方法有没有被调用,4.1和4.2都调用了;查看vtkMapper.h,
// Description:
// Turn on/off flag to control whether scalar data is used to color objects.
vtkSetMacro(ScalarVisibility, int);
vtkGetMacro(ScalarVisibility, int);
vtkBooleanMacro(ScalarVisibility, int);
宏定义,没看懂,也不能设置断点,猜测是跟ScalarVisibility有关系,影响渲染时候的颜色模式;
2. 20150505
昨天断点设置在Actor的构造函数,一直在执行初始化,将断点设置在Actor.cxx的RenderOpaqueGeometry(vtkViewport *vp)方法,查看调用栈,在vtkRenderer.cxx中调用了actor,因此查看vtkRenderer.cxx;
这个是vtk的Render,在渲染的时候,需要设置各种所需要的信息,猜测是在pv中对模式的选择,因此从调用栈往上查看,找到pv的render,vtkPVRenderViewClientServer.cxx;
vtkProp是所有actors, volumes and annotations的父类,是任意可以在场景中存在的对象(either 2D or 3D)的父类;
每一次对模型的操作,都要运行vtkActor::RenderOpaqueGeometry(vtkViewport *vp)方法,以及stillRender()方法,定义在vtkPVRenderView.h中;
vtkPVRenderView.cxx中的SetInteractionMode(int mode)设置场景交互方式,默认是3D;
3. vtkPLYReader读取ply格式的数据,将颜色值保存在face结构体中,
face->RGBCells()->output->outInfo->outputVector->\\ProcessRequest->CallAlgorithm,
4. vtkPVRenderView.cxx中的SetAmbientColor(double r, double g, double b),SetSpecularColor(double r, double g, double b),SetDiffuseColor(double r, double g, double b)只进行了初始化,都设置为(1,1,1),在模型加载的时候没有被调用;SetIntensity(double val)以及SetLightType(int val)也是在初始化的时候设置,没有调用;
5. 小结:pv的Render中调用了vtk的render,在渲染过程中去添加各种参数;今天的一个误区,以为通过环境光、镜面光、漫反射光来给模型着色,在OpenGL中是有这样的方法,然而对于地质模型,不需要这么复杂的着色,而是根据模型本身定义的颜色来着色;根据模型本身定义的颜色着色也有两种,一种是根据插值,形成渐变色,另一种是对于一整块模型添加一种颜色;
6. 查看了一些资料,都是说Mapper的ScalarVisibility 影响了Actor的颜色,今天查看这一部分代码的时候错误修改了宏,导致很多工程重新编译,深刻教训,不要随便修改宏。