VTK修炼之道69:体绘制讨论_颜色传输函数
生活随笔
收集整理的這篇文章主要介紹了
VTK修炼之道69:体绘制讨论_颜色传输函数
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.顏色傳輸函數(shù)
顏色傳輸函數(shù)與不透明度傳輸函數(shù)的使用類似,二者的不同之處在于顏色傳輸函數(shù)是將一個(gè)標(biāo)量值映射為顏色值。這個(gè)顏色值可以是RGB值,也可以是HSV值。 VTK顏色傳輸函數(shù)采用VTKColorTransferFunction類實(shí)現(xiàn),其函數(shù)為: int AddRGBPoint(double x,double r,double g, double b); int AddHSVPoint(double x,double h,double s,double v);這樣就可以實(shí)現(xiàn)一個(gè)RGB斷點(diǎn)或者HSV斷點(diǎn)的添加,其中x表示像素灰度值,r,g,b為映射的RGB分量,h,s,v為映射的HSV顏色分量。 當(dāng)然,顏色傳輸函數(shù)也支持添加線段的方法。 void AddRGBSegment(double x1, double r1,double g1,double b1, double x2,double r2,double g2,double b2); void AddHSVSegment(double x1, double h1,double s1,double v1, double x2,double h2,double s2,double v2); 顏色傳輸函數(shù)標(biāo)準(zhǔn)代碼片如下: vtkSmartPointer<vtkColorTransferFunction> color =vtkSmartPointer<vtkColorTransferFunction>::New();color->AddRGBPoint(0, 0, 0, 0);color->AddRGBPoint(64, 1.0, 0.52, 0.3);color->AddRGBPoint(190.0, 1.00, 1.00, 1.00);color->AddRGBPoint(220.0, 0.20, 0.20, 0.20); 由于VTKVolumeProperty接受兩種形式的顏色傳輸函數(shù)(灰度或者RGB),一次在獲取相應(yīng)的顏色傳輸函數(shù)時(shí),需要首先判斷VTKVolumeProperty已經(jīng)設(shè)置的顏色傳輸類型,其函數(shù)為: int GetColorChannels(); 如果返回為1,則說(shuō)明設(shè)置的是灰度傳輸函數(shù); 如果返回為3,則說(shuō)明設(shè)置的是彩色RGB傳輸函數(shù)。 根據(jù)不同的類型既可通過(guò)如下函數(shù)獲取有效的傳輸函數(shù): VTKColorTransferFunction* GetRGBTransferFunction(); vtkPiecewiseFunction* GetGrayTransferFunction();2.多元數(shù)據(jù)體繪制渲染
前面只要討論了設(shè)置標(biāo)量圖像體繪制的不透明度傳輸函數(shù)、梯度不透明度傳輸函數(shù)和顏色傳輸函數(shù)。而多元數(shù)據(jù)體繪制渲染時(shí)需要根據(jù)數(shù)據(jù)區(qū)別對(duì)待。 如果多元數(shù)據(jù)的各個(gè)組分是相互獨(dú)立的,則可以為每個(gè)組分單獨(dú)設(shè)置相應(yīng)的不透明度、梯度不透明度、顏色傳輸函數(shù)。 在位VTKVolumeProperty設(shè)置相應(yīng)傳輸函數(shù)時(shí),應(yīng)為多元數(shù)據(jù)組分較多,所以需要在函數(shù)中指定一個(gè)索引號(hào),表示當(dāng)前為那個(gè)組分設(shè)置,標(biāo)準(zhǔn)代碼片如下: void SetScalarOpacity(int index, vtkPiecewiseFunction* function); void SetGradientOpacity(int index, vtkPiecewiseFunction* function); void SetColor(int index, vtkPiecewiseFunction* function); void SetColor(int index, vtkColorTransferFunction* function);多元數(shù)據(jù)的組分可能是非獨(dú)立的,例如,RGB圖像中每個(gè)像素的顏色值是由R.G.B三個(gè)顏色組分共同定義的。vtkVolumeMapper支持兩種類型的非獨(dú)立多元數(shù)據(jù)。- 第一種是二元數(shù)據(jù)。第一元數(shù)據(jù)用于定義顏色傳輸函數(shù),第二元數(shù)據(jù)用于定義不透明度傳輸函數(shù);
- 第二種是四元數(shù)據(jù)。前三元數(shù)據(jù)作為一個(gè)R.G.B顏色定義顏色傳輸函數(shù),第四元數(shù)據(jù)用于定義不同明度傳輸函數(shù)。
3.參看資料
1.《C++ primer》2.《The VTK User’s Guide – 11thEdition》
3. ?張曉東, 羅火靈. VTK圖形圖像開(kāi)發(fā)進(jìn)階[M]. 機(jī)械工業(yè)出版社, 2015. 與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的VTK修炼之道69:体绘制讨论_颜色传输函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VTK修炼之道68:体绘制讨论_梯度不透
- 下一篇: VTK修炼之道70:体绘制讨论_光照阴影