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的顏色,今天查看這一部分代碼的時候錯誤修改了宏,導致很多工程重新編譯,深刻教訓,不要隨便修改宏。