ParaviewWeb学习记录7——模型颜色问题3

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的颜色,今天查看这一部分代码的时候错误修改了宏,导致很多工程重新编译,深刻教训,不要随便修改宏。

你可能感兴趣的:(Paraview)