//
// Created by xuming on 2021/8/10.
//
/*
* 纹理映射是创建逼真效果的强大图像工具,其原理是渲染时把二维的图像,“贴” 到物体表面上
* 根据二维图像渲染出丰富多彩的效果图,所以也叫纹理贴图
* 需要待贴图的表面,纹理映射以及纹理坐标
* 纹理映射在 VTK 中就是 vtkImageData的数据集,而纹理坐标则用于控制纹理图在表面的位置。
*/
#include <vtkAutoInit.h>
#include <vtkSmartPointer.h>
#include <vtkJPEGReader.h>
#include <vtkTexture.h>
#include <vtkPlaneSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
int main() {
vtkSmartPointer<vtkJPEGReader> reader =
vtkSmartPointer<vtkJPEGReader>::New();
// 读入 JPEG 图像输入到 VTKTexture 里, 它将贴到平面上的一个纹理图
reader->SetFileName("/home/xuming/HBWorkSpace/WorkStudy/algorithm_code/cprg/data/texture.jpg");
vtkSmartPointer<vtkTexture> texture =
vtkSmartPointer<vtkTexture>::New();
texture->SetInputConnection(reader->GetOutputPort());
texture->InterpolateOn();
// 定义 vtkPlaneSource 对象,vtkPlanceSource 可以生成一个平面,也即是纹理图要贴图的地方
vtkSmartPointer<vtkPlaneSource> plane =
vtkSmartPointer<vtkPlaneSource>::New();
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(plane->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->SetTexture(texture);
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderWindow> renWin =
vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer);
renWin->SetSize(640, 480);
renWin->Render();
renWin->SetWindowName("TextureExample");
vtkSmartPointer<vtkRenderWindowInteractor> iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
iren->Initialize();
iren->Start();
return 0;
}
VTK 纹理映射
最新推荐文章于 2022-07-06 10:58:09 发布