VTK纹理映射

VTK笔记-纹理贴图-vtkTexture类 计算机图形学中的纹理既包括通常意义上物体表面的纹理即使物体表面呈现凹凸不平的沟纹,同时也包括在物体的光滑表面上的彩色图案,通常我们更多地称之为花纹。对于花纹而言,就是在物体表面绘出彩色花纹或图案,产生了纹理后的物体表面依然光滑如故。对于沟纹而言,实际上也是要在表面绘出彩色花纹或图案,同时要求视觉上给人以凹凸不平感即可。 凹凸不平的图案一般是不规则的。在计算机图形学中,这两种类型的纹理的生成方法完全一致, 这也是计算机图形学中把他们统称为纹理的原因所在。 所以纹理映射就是在物体的表面上绘制彩色的图案。 .. 阅读详情
 本文介绍VTK中纹理映射。

纹理映射

  纹理映射是创建逼真效果的强大的图形工具,其原理是渲染时把二维的图像“贴”到物体的表面啥昂,根据二维图像渲染出丰富多彩的效果,所有也叫纹理贴图。纹理映射需要三个要素:待贴图的表面、纹理映射以及纹理坐标。其中纹理映射在VTK中就是vtkImageData的数据集,而纹理坐标则用于控制纹理图在表面的位置,作为被贴对象数据的属性。

vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
    reader->SetFileName("E:/TestData/texture.jpg");

    vtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New();
    texture->SetInputConnection(reader->GetOutputPort());
    texture->InterpolateOn();           //纹理映射

    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);

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

这里写图片描述

纹理映射原理

  纹理映射(Texture Mapping)是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。纹理生成过程实质上是将所定义的纹理映射为某种三维物体表面的属性,并参与后续的光照计算。
  实现纹理映射主要是建立纹理空间与模型空间、模型空间与屏幕空间之间的映射关系。其中纹理空间可以定义为u-v空间,每个轴坐标范围为(0,1)。其中对于一个纹理图像,其左下角uv坐标为(0, 0),右上角坐标为(1, 1)。而对于简单的参数模型,可以方便地建立模型与纹理空间的映射关系,比如球面、圆柱面等。然后根据图形学三维空间变换容易实现模型空间到屏幕空间的变换,因此最终显示在计算机屏幕的图像即是纹理映射后的结果。纹理映射示意图如下:

这里写图片描述

  而对于无参数化曲面的纹理映射技术,通常需要将纹理空间到模型空间的映射分解为两个简单的映射。这里需要引入一个包围景物的中介三维曲面作为中介映射媒介。主要实现步骤如下:

  1. 先将二维纹理空间映射到一个简单的三维物体表面,例如球面、圆柱面等;
  2. 然后将上述中介物体表面的纹理映射到模型的表面,例如以模型表面法线与中介模型的交点作为映射点。
    这样即实现由纹理空间到模型空间的映射。
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<vtkPolyDataMapper> mapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(texturemap->GetOutputPort());

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

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

贴纹理前
贴纹理前

贴纹理后
这里写图片描述

vtkTextureMapToCylinder通过一个圆柱面建立纹理空间到模型空间的映射关系。类似还有vtkTextureMapToPlane通过平面建立映射关系,vtkTextureMapToSphere通过球面建立映射关系。
查看这些类的源代码发现:

out->GetPointData()->SetTCoords(newTCoords)

说明纹理映射算法vtkTextureMapToPlane、vtkTexttureMapToSphere、vtkTextureMapToCylinder,主要作用是设置纹理坐标(即属性数据)。算法的输入数据和算法输出数据的几何结构和物理结构都是一样的。

  • 如果不进行actor->SetTexture(),虽然有纹理坐标的属性数据,但是不显示纹理的。
  • 如果不用纹理映射算法Filter,直接SetTexture(),则actor会自动设置纹理坐标的属性数据,来显示纹理。

vtkTexture描述中有Note that textures will only work if texture coordinates are also defined。
如果纹理图片某处是透明的,则纹理映射之后,也是透明的(设了SetColor后,透明处不显示颜色,不透明处显示颜色。)

C++写纹理贴图中OBJ文件和MTL(材质)文件 阅读详情

相关推荐

VTK渲染raw格式的三维点云数据,并纹理贴图(纹理映射)

#include<vtkSmartPointer.h> #include<vtkRenderWindow.h> #include<vtkRenderer.h> #include<vtkRenderWindowInteractor.h> #include<vtkInteractorStyleTrackballCamera.h> #incl...

weirdo_coder的博客 2730

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

1.纹理映射 纹理映射是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。纹理生成过程实质上是将所定义的

沈春旭的博客 3392

掌握VTK三维纹理映射技术

VTK(Visualization Toolkit)是一个开源的、跨平台的库,专门用于三维计算机图形学、图像处理和可视化的软件系统。它广泛应用于医疗成像、科学可视化和计算机视觉等多个领域。VTK能够处理大规模数据集,支持复杂的可视化算法,提供了一套丰富的三维图形渲染和数据处理功能。由于其高度模块化的设计,VTK允许开发者仅使用所需部分,也易于进行自定义扩展,从而为研究和开发提供了极大的灵活性。

weixin_31938351的博客 831

Python调用vtk库和numpy绘制自定义曲面,并进行纹理映射

使用vtk库进行自定义曲面的三维绘制,并进行纹理映射,适用于已知曲面公式的三维物体的建模和纹理映射。

m0_57315535的博客 3265

VTK纹理映射体绘制_三维纹理映射

用VS2013配置PCL后可以运行此程序,程序有PCL的属性列表,改一下就好,此程序为VTK的纹理映射体绘制_三维纹理映射,内含vtk文件

Agent本地部署教程详细步骤

在开始之前,你需要明确你要部署的Agent是什么。如果你需要部署其他Agent,请参考其官方文档调整步骤。

weixin_39673931的博客 2502

VTK笔记——纹理映射

有时候,我们为了使三维图形有更加逼真的效果,叫纹理映射,或叫纹理贴图。 下面是一个对圆柱体进行纹理贴图的例子,把一张二维的图“贴”到圆柱体的表面。 #include <vtkCylinderSource.h> #include <vtkLineSource.h> #include <vtkPolyData.h> #include <vtkSmartP...

Andy的专栏 2785

Nature风格的北半球投影图,几行代码就能绘制...

在子刊***Nat. Clim. Chang.***中,通过北极俯视投影表示NAO和AO的EOF分解。仅在定义图层的时候设置为该投影,其余设置content,绘制contourf都是PlateCaree。如子刊Nature Geosci中表示了海冰的漂移,还添加了DEM底图,非常美观。以海温数据为例,ERA5月温度平均,是一张721*1440的0.25degTIF。现在的结果看起来不错,但太大了,我们如果只需要北半球的数据,则需要指定经纬度。绘制完结果也是正方形,和ArcGIS差不多,见之前的推文。

wlh2067的博客 1292

VTK修炼之道64:纹理映射体绘制_三维纹理映射

1.三维纹理映射 目前市面上的能多先科都是支持三维纹理映射的。利用三维纹理映射,将体数据映射至一组与视图平面平行的多边形,避免了二维纹理映射方法中因为纹理图像的切换造成的瑕疵。VTK中三维纹理映射体绘制方法由vtkVolumeTexture3D类实现,使用方法与二维纹理映射体绘制方法一致。(实时渲染效果真的是非常好) 代码如下: #include VTK_MODULE_INIT(v

沈春旭的博客 6790

基于Q-learning的无人机三维路径规划(含完整C++代码)

基于Q-learning的无人机三维路径规划(含完整C++代码)

weixin_54186646的博客 1万+

使用Python爬虫抓取公共交通网站的时刻表

Python爬虫是一种通过自动化方式从网页中抓取数据的程序。爬虫通过模拟用户请求,获取网站的HTML页面内容,并通过解析这些HTML内容,提取出我们需要的信息。requests:用于向网站发送HTTP请求并获取响应。:用于解析HTML文档,提取数据。Selenium:用于处理动态加载的网页,模拟浏览器操作。pandas:用于数据处理和分析,方便存储和操作抓取到的数据。本文介绍了如何使用Python爬虫抓取公共交通网站的时刻表,并提取其中的关键信息。我们使用了requestsSelenium和。

2201_76125261的博客 1119

VTK修炼之道63:纹理映射体绘制_二维纹理映射

1.纹理映射体绘制 基于软件实现的光线投影体绘制算法计算量非常大,不利于进行实时渲染。因此,目前体绘制经常使用图形硬件利用纹理映射来加速。 其主要原理是将三维体数据作为纹理装载入硬件缓存中,利用硬件来实现插值以及图像合成操作,以提高绘制效率。 基于图形硬件三维纹理功能的体绘制技术,主要是利用硬件的三线性过滤插值能力,通过渲染多个与视线垂直的面片来重建整个三维结构。每个面片利用三维纹理来决

沈春旭的博客 3447

026:vue+threeJS 设置地面铺砖的效果

BoxGeometry 是 Three.js 中用于创建立方体或长方体的几何体类。它允许你指定立方体的宽度、高度、深度以及这三个方向上的分段数,从而控制立方体的细分程度。width: 立方体的宽度(沿 x 轴方向)。height: 立方体的高度(沿 y 轴方向)。depth: 立方体的深度(沿 z 轴方向)。widthSegments: 可选参数,指定立方体在 x 轴方向上的分段数,默认值为 1。heightSegments: 可选参数,指定立方体在 y 轴方向上的分段数,默认值为 1。

大剑师兰特的GIS世界 646

vtk纹理映射

vtk 纹理映射 原理:渲染时把二维的图像"贴"到物体的表面上,根据二维图像渲染出丰富多彩的效果,所以也叫纹理贴图。纹理映射需要三个要素:待贴图的表面、纹理映射以及纹理坐标。 example code #include <vtkSmartPointer.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include

Jeremy写字的地方 485

pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图

博主基于https://github.com/hpc203/GroundingDINO-onnxrun项目分享的onnx c++推理代码,修改为GroundingDINO模型的tensorrt推理代码。对于600x400的输入,在3060显卡下,cuda 12.1,TensorRT-10.4.0,window环境下53ms处理完一张图片。

a486259的博客 1221

看懂特斯拉IMU底层逻辑,才懂农业机器人不可替代的核心技术壁垒

在自动驾驶与具身智能赛道,特斯拉彻底重构了IMU(惯性测量单元)的技术定位,打破行业“IMU仅为辅助补盲配件”的固有认知,将其从底盘附属硬件升级为纯视觉感知体系的物理核心基座。依托500–1000Hz超高刷新率、无外部依赖的惯性感知能力、端到端神经网络融合架构,特斯拉实现了“视觉感知环境、IMU定义运动”的技术闭环,摆脱对激光雷达、高精地图、卫星定位的强依赖。这套技术逻辑落地农业机器人赛道,不再是技术优化,而是规模化落地的生存刚需。城市自动驾驶属于结构化稳定场景,IMU仅作误差修正的锦上添花;

getusushu的博客 49

VTK系列63_VTK几何体纹理映射

实例63:纹理映射 #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkRenderingFreeType); VTK_MODULE_INIT(vtkInteractionStyle); #include <vtkSmartPointer.h> #include <vtkRenderWindowInteractor.h> #include <vt

qq_32809093的博客 674

petalinux2022.2启动文件编译配置

petalinux2021之前的版本里,导入目录components/yocto/下的“environment-setup-aarch64-xilinx-linux” 和 “layers/core/oe-init-build-env”的环境,能使用Yocto的devtool工具。(加入下面内容,先petalinux-build下载完成后才能有源码)制作 BOOT.BIN 启动文件:petalinux-package --boot --fsbl --fpga --u-boot --force。

wangjie36的博客 1391

第06章 02 VTK中的纹理映射原理与示例

纹理映射是一种将图像(纹理)映射到三维模型的表面的技术。在 VTK 中,纹理映射是通过使用 vtkTexture 类来实现的

捕鲸叉的专栏 1026

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VTK学习(六)纹理映射

/*编程环境VS2013+VTK7.1,By yyy 2017.11.7*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

yuyangyg的博客 1098

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VTK:图形基本操作进阶——纹理映射

1.纹理映射 纹理映射是将纹理空间中的纹理像素映射到屏幕空间中的像素过程。纹理生成过程实质上是将所定义的纹理映射为某种三维物体表面的属性,并参与后续的光照计算。在三维图形中,纹理映射应用的十分广泛,尤其是描述具有真实感的物体。 实现纹理映射主要是建立纹理空间与模型空间、模型空间与屏幕空间之间的映射关系,如下图所示 其 中纹理空间可以定义为u-v空间,每个坐标轴的范围为(0,1)。对于一个纹理图像,其左下角的坐标为(0,0),右上角(1,1)。而对于简单的参数模型,可以方便地建立模型与纹理空间的映射关系,

m0_45306991的博客 1122

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VTK_Learning_纹理映射体绘制_三维纹理映射

1.三维纹理映射 目前市面上的能多先科都是支持三维纹理映射的。利用三维纹理映射,将体数据映射至一组与视图平面平行的多边形,避免了二维纹理映射方法中因为纹理图像的切换造成的瑕疵。VTK中三维纹理映射体绘制方法由vtkVolumeTexture3D类实现,使用方法与二维纹理映射体绘制方法一致。(实时渲染效果真的是非常好) 代码如下: #include <vtkAutoInit.h&g...

weixin_38293453的博客 672

点云纹理映射 matlab,VTK渲染raw格式的三维点云数据,并纹理贴图(纹理映射)...

#include#include#include#include#include#include#include #include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includ...

weixin_32743045的博客 1707

VTK 纹理映射

// // Created by xuming on 2021/8/10. // /* * 纹理映射是创建逼真效果的强大图像工具,其原理是渲染时把二维的图像,“贴” 到物体表面上 * 根据二维图像渲染出丰富多彩的效果图,所以也叫纹理贴图 * 需要待贴图的表面,纹理映射以及纹理坐标 * 纹理映射在 VTK 中就是 vtkImageData的数据集,而纹理坐标则用于控制纹理图在表面的位置。 */ #include <vtkAutoInit.h> #include <v

言午日月 414

VTK:纹理映射体绘制——三维纹理映射

1.三维纹理映射 利用三维纹理映射,将体数据映射至一组与视图平面平行的多边形,避免了二维纹理映射方法中因为纹理映射的切换造成的瑕疵。。VTK中三维纹理映射体绘制方法由vtkVolumeTexture3D类实现,使用方法与二维纹理映射体绘制方法一致。 #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkRenderingVolumeOpenGL); VTK_MODULE_INIT(v

m0_45306991的博客 933

vtk学习之texture纹理映射

1. 实践 #include <vtkSmartPointer.h> #include <vtkJPEGReader.h> #include <vtkTexture.h> #include <vtkPlaneSource.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderWindow.h> #include <vtkRe

Christo的博客 718
上一篇: VTK纹理映射之vtkTransformTextureCoods
下一篇: VTK数据的读写
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值