VTK纹理映射之vtkTransformTextureCoods

本文介绍vtkTransformTextureCoods类。

纹理坐标系

  在《VTK纹理映射》文中,我们其实用的都是2D纹理,使用一张图片。它的坐标系是(s,t),即前面提到的u-v。

这里写图片描述

也可以有3D纹理,它被认为是多个2D Texture。,坐标系s-t-r。

这里写图片描述

vtkTransformTextureCoods

  vtkTransformTextureCoods类用来变换纹理坐标的,包括缩放、旋转和平移。即它是一个操作纹理坐标的filter,任何数据集都可以作为输入,同时输出和输入类型一直的数据集。被操作的纹理坐标被看作r-s-t,如上图所示。如果纹理映射是二维的,t 坐标就会被忽略。

vtkSmartPointer<vtkBMPReader> texReader =
        vtkSmartPointer<vtkBMPReader>::New();
    texReader->SetFileName("E:/TestData/masonry.bmp");

    vtkSmartPointer<vtkTexture> texture =
        vtkSmartPointer<vtkTexture>::New();
    texture->SetInputConnection(texReader->GetOutputPort());

    vtkSmartPointer<vtkXMLPolyDataReader> modelReader =
        vtkSmartPointer<vtkXMLPolyDataReader>::New();
    modelReader->SetFileName("E:/TestData/cow.vtp");

    vtkSmartPointer<vtkTextureMapToCylinder> texturemap =
        vtkSmartPointer<vtkTextureMapToCylinder>::New();
    texturemap->SetInputConnection(modelReader->GetOutputPort());

    vtkSmartPointer<vtkTransformTextureCoords> transformTexture =
        vtkSmartPointer<vtkTransformTextureCoords>::New();
    transformTexture->SetInputConnection(texturemap->GetOutputPort());
    transformTexture->SetScale(1, 1, 0);  //由于是二维映射,所以第三个参数r-Axis是不起作用的。

    vtkSmartPointer<vtkPolyDataMapper> mapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(texturemap->GetOutputPort());

    vtkSmartPointer<vtkActor> actor =
        vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    actor->SetTexture(texture);

将actor加入自己的vtkRenderer实例中,运行结果:

这里写图片描述

验证修改r-axis参数,不起作用:

这里写图片描述

实现重复纹理,将纹理坐标s、t方向进行放大,有[0,1]变换成[0,5]:

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
要在Python中使用VTK添加纹理,可以遵循以下步骤: 1.加载纹理图像:使用vtkJPEGReader或vtkPNGReader等VTK图像读取器加载您的纹理图像。 ```python textureImageReader = vtk.vtkJPEGReader() textureImageReader.SetFileName("texture.jpg") textureImageReader.Update() ``` 2.创建纹理:使用vtkTexture对象创建一个新的纹理,并将其与图像连接起来。 ```python texture = vtk.vtkTexture() texture.SetInputConnection(textureImageReader.GetOutputPort()) ``` 3.应用纹理:使用vtkActor对象的SetTexture方法将纹理应用于要纹理化的几何体。 ```python actor = vtk.vtkActor() actor.SetMapper(sphereMapper) actor.SetTexture(texture) ``` 完整的代码示例: ```python import vtk # 加载纹理图像 textureImageReader = vtk.vtkJPEGReader() textureImageReader.SetFileName("texture.jpg") textureImageReader.Update() # 创建纹理 texture = vtk.vtkTexture() texture.SetInputConnection(textureImageReader.GetOutputPort()) # 创建一个球 sphere = vtk.vtkSphereSource() sphere.SetThetaResolution(32) sphere.SetPhiResolution(32) # 创建渲染器、渲染窗口、交互器 renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(400, 400) renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # 创建一个球的mapper sphereMapper = vtk.vtkPolyDataMapper() sphereMapper.SetInputConnection(sphere.GetOutputPort()) # 创建一个带有纹理的球的actor actor = vtk.vtkActor() actor.SetMapper(sphereMapper) actor.SetTexture(texture) # 将actor添加到渲染器中 renderer.AddActor(actor) renderer.SetBackground(0.2, 0.3, 0.4) # 启动交互器 interactor.Initialize() renderWindow.Render() interactor.Start() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值