日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VTK修炼之道59:图形基本操作进阶_纹理映射

發(fā)布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VTK修炼之道59:图形基本操作进阶_纹理映射 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.紋理映射

紋理映射是將紋理空間中的紋理像素映射到屏幕空間中的像素的過程。紋理生成過程實(shí)質(zhì)上是將所定義的紋理映射為某種三維物體表面的屬性,并參與后續(xù)的光照計算。在三維圖形中,紋理映射運(yùn)用的十分廣泛,尤其是描述具有真實(shí)感的物體。

實(shí)現(xiàn)紋理映射主要是建立紋理空間與模型空間、模型空間與屏幕空間之間的映射關(guān)系,如上圖所示。其中紋理空間可以定義為u-v空間,每個坐標(biāo)軸的范圍為(0,1)。對于一個紋理圖像,其左下角的坐標(biāo)為(0,0),右上角坐標(biāo)為(1,1)。 而對于簡單的參數(shù)模型,可以方便地建立模型與紋理空間的映射關(guān)系,例如球面、圓柱面等。 而根據(jù)圖形學(xué)三維空間變換容易實(shí)現(xiàn)模型空間到屏幕空間的變換,因此最終顯示在計算機(jī)屏幕的圖像及時紋理映射后的結(jié)果。 面對無參數(shù)化曲面的紋理映射技術(shù),通常需要蔣雯麗空間到模型空間的映射分解為兩個簡單映射,需要引入一個包圍景物的中介映射媒介,只要步驟如下: 現(xiàn)將二維紋理空間映射為一個簡單的三維物體表面(球面圓柱面等);然后將該中介物體表面的紋理映射到模型表面(例如,以模型表面法線與中建模型的交點(diǎn)作為映射點(diǎn)),這就可以實(shí)現(xiàn)由紋理空間到模型空間映射。

2.VTK中實(shí)現(xiàn)紋理映射

VTK中定義了多個類實(shí)現(xiàn)紋理空間到模型空間的映射
  • vtkTextureMapToPlane:通過一個平面建立紋理空間到模型空間的映射關(guān)系;
  • vtkTextureToSphere:通過球面建立映射關(guān)系;
  • vtkTextureMapToCylinder:通過圓柱面建立映射關(guān)系;
  • vtkTexture:實(shí)現(xiàn)加載紋理;
  • vtkTransformTextureCoords:實(shí)現(xiàn)紋理坐標(biāo)的平移和縮放。
本實(shí)例使用vtkTextureMapToCylinder建立紋理映射,具體實(shí)現(xiàn)如下: #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); VTK_MODULE_INIT(vtkRenderingFreeType); VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkSmartPointer.h> #include <vtkBMPReader.h> //讀入紋理圖像 #include <vtkTexture.h> //加載紋理圖像 #include <vtkXMLPolyDataReader.h>//加載模型數(shù)據(jù) #include <vtkTextureMapToCylinder.h>//采用圓柱作為中介 #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkOrientationMarkerWidget.h> #include <vtkAxesActor.h> #include <vtkOrientationMarkerWidget.h>int main(int argc, char *argv[]) {vtkSmartPointer<vtkBMPReader> texReader =vtkSmartPointer<vtkBMPReader>::New();texReader->SetFileName("masonry.bmp");vtkSmartPointer<vtkTexture> texture =vtkSmartPointer<vtkTexture>::New();texture->SetInputConnection(texReader->GetOutputPort());vtkSmartPointer<vtkXMLPolyDataReader> modelReader =vtkSmartPointer<vtkXMLPolyDataReader>::New();modelReader->SetFileName("cow.vtp");//紋理映射vtkSmartPointer<vtkTextureMapToCylinder> texturemap =vtkSmartPointer<vtkTextureMapToCylinder>::New();texturemap->SetInputConnection(modelReader->GetOutputPort());/*******************************************************************/vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(texturemap->GetOutputPort());vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->SetTexture(texture); //加載紋理圖//設(shè)定坐標(biāo)系vtkSmartPointer<vtkAxesActor> axes =vtkSmartPointer<vtkAxesActor>::New();vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(actor);renderer->SetBackground(0, 0, 0);vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();rw->AddRenderer(renderer);rw->SetSize(640, 480);rw->SetWindowName("TextureMap");vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();rwi->SetRenderWindow(rw);/**********************************************************/vtkSmartPointer<vtkOrientationMarkerWidget> widget =vtkSmartPointer<vtkOrientationMarkerWidget>::New();widget->SetOutlineColor(1, 1, 1);widget->SetViewport(0, 0, 0.3,0.3);widget->SetOrientationMarker(axes);widget->SetInteractor(rwi);widget->SetEnabled(1);widget->InteractiveOn();/**********************************************************/renderer->ResetCamera();rw->Render();rwi->Start();return 0; }
這個實(shí)例應(yīng)用非常簡單,輸出結(jié)果如下:

3.參看資料:

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3. ?張曉東, 羅火靈. VTK圖形圖像開發(fā)進(jìn)階[M]. 機(jī)械工業(yè)出版社, 2015.

總結(jié)

以上是生活随笔為你收集整理的VTK修炼之道59:图形基本操作进阶_纹理映射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。