vtk9.3 配置 visual studio 2019 运行环境 和运行实例详解

news2024/11/15 20:10:51

 (1)包含文件配置:

        项目--属性--VC++目录,在包含目录中把include文件夹的地址加进去,一直要到下一级 vtk-9.3目录下,

 小知识:  在Visual Studio 2019中运行项目时,如果项目中使用了第三方库,需要配置VC++目录中的包含目录,将第三方库的include文件夹地址加入其中。这是因为第三方库通常包含了一些头文件,这些头文件包含了库的声明和定义,如果不将其包含在项目中,编译器将无法找到这些头文件,导致编译错误。

        通过在项目属性中配置VC++目录,将第三方库的include文件夹地址加入其中,可以告诉编译器在编译项目时去哪里查找这些头文件,从而解决编译错误并成功使用第三方库。这样配置可以确保项目能够正确地引用和使用第三方库的功能,使得项目的开发和运行更加顺利和高效。

(2) 在库目录中,把lib文件夹的地址加进去:

 

小知识:

        在Visual Studio 2019中运行项目时,如果项目中使用了第三方库,需要配置VC++目录中的库目录,将第三方库的lib文件夹地址加入其中。这是因为第三方库通常包含了编译后的库文件(.lib文件),这些库文件包含了库的实现代码和函数定义

        通过在项目属性中配置VC++目录,将第三方库的lib文件夹地址加入其中,可以告诉链接器在链接项目时去哪里查找这些库文件,从而成功地将第三方库的功能链接到项目中。如果不将库目录配置正确,链接器将无法找到相应的库文件,导致链接错误和无法正常运行项目。

      因此,配置库目录是确保项目能够正确链接并使用第三方库的关键步骤,使得项目的开发和运行更加顺利和高效。

(3) 然后在 链接器--输入--附加依赖项中加入静态库 lib的依赖项:

小知识:

        在Visual Studio 2019中运行项目时,如果项目中使用了第三方库的静态库(.lib文件),需要在链接器的输入中添加这些静态库的依赖项。这是因为静态库包含了库的实现代码和函数定义,而在链接阶段需要将这些代码和函数链接到项目中。

        通过在项目属性中配置链接器的输入,添加静态库的依赖项,可以告诉链接器在链接项目时需要使用哪些静态库,从而成功地将第三方库的功能链接到项目中。如果不添加静态库的依赖项,链接器将无法找到相应的静态库,导致链接错误和无法正常运行项目。

        因此,配置静态库的依赖项是确保项目能够正确链接并使用第三方库的关键步骤,使得项目的开发和运行更加顺利和高效。

小知识:

       那么为什么?: 配置了:项目--属性--VC++目录,还要配置:链接器--输入--附加依赖项中加入静态库 lib的依赖项

       回答:     配置了项目属性中的VC++目录,将库目录中的lib文件夹的地址加入后,可以让编译器在编译时找到第三方库的头文件(.h文件),以便正确识别和编译项目中对第三方库的引用。

        然而,仅仅配置了VC++目录并不能告诉链接器在链接时需要使用哪些静态库。因此,需要在链接器的输入中添加静态库的依赖项,以告诉链接器在链接项目时需要使用哪些静态库,从而成功地将第三方库的功能链接到项目中。

        总结而言,配置VC++目录可以让编译器找到第三方库的头文件,而配置链接器的输入可以告诉链接器在链接时需要使用哪些静态库。这两个步骤结合起来,能够确保项目能够正确链接并使用第三方库的功能。

(4)copy 一份例子看是否可以运行

#include "cylinderExaple.h"


#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h> 
int main(int argc, char* argv) {

	/**
	(1) vtkCylinderSource
		该类派生自 vtkPolyDataAlgorithm。顾名思义,vtkCylinderSource 生成的数据类型就是vtkPolyData,
		它主要是生成一个中心在渲染场景原点的柱体,柱体的长轴沿着Y轴,柱体的高度、截面半径等都可以任意指定。
		vtkCylinderSource::SetHeight():设置柱体的高。
		vtkCylinderSource:SetRadius():设置柱体横截面的半径。
		vtkCylinderSource::SetResolution(): 设置柱体横截面的等边多边形的边数。转动一下柱体,然后数一数柱体横截面有多少条边,应该就能明白这个参数所表示的意思。
	**/
	vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();
	cylinder->SetHeight(3.0);
	cylinder->SetRadius(1.0);
	cylinder->SetResolution(10);

	/**
	(2)vtkPolyDataMapper
	  该类用于渲染多边形几何数据 (vtkPolyData),派生自类vtkMapper,将输入的数据转换为几何图元(点、线、多边形)进行染。
	  vtkPolyDataMapper::SetInputConnection();
	  VTK可视化管线的输入数据接口,对应的可视化管线的输出数据接口为 GetOutputPort();
	  VTK 5.0之前的版本使用 SetInput0和 GetOutput0)作为输入输出接口,VTK5X版本保留了对这两个接口的支持。
	**/
	vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort());



	/**
	(3) vtkActor
	   该类派生自 vtkProp 类,渲染场景中数据的可视化表达通过 vtkProp 的子类负责。
	   比如该示例要渲染一个柱体,柱体的数据类型是 vtkPolyData,数据要在场景中渲染时,不是直接把数据加入渲染场景,而是以 vtkProp 的形式存在于染场景中。
	   三维空间中渲染对象最常用的vtkProp 子类有 vtkActor (表达场景中的几何数据)和 vtkVolume(表达场景中的体数据);
	   二维空间中的数据则是用 vtkActor2D 表达:vtkProp 子类负责确定染场景中对象的位置、大小和方向等信息;
	   Prop 依赖于两个对象:一个是 Mapper (vtkMapper)对象,负责存放数据和渲染信息;
	   另一个是属性(vtkProperty)对象,负责控制颜色、不透明度等参数。另外vtkActor 中还可以设置纹理(vtkTexture)对象,用于纹理贴图。
	   VTK 定义了大量的 Prop 类,
				 如 vtkImageActor (负责图像显示)和vtkPieChartActor (用于创建数组数据的饼图可视化表达形式)。
	   其中有些 Prop 内部直接包括了控制显示的参数和待渲染数据的索引,因此并不需要额外的 Property 和 Mapper 对象,
				 例如 vtkAxisActor。
	   vtkActor 的子类 vtkFollower 可以自动更新方向信息使其始终面向一个特定的相机,这样无论怎样旋转该对象都是可见的,
				 例如三维场景中的广告板或者文本。
	   vtkActor 的子类vtkLODActor 可以自动改变自身的几何表达形式来实现所需的交互帧率。
	   vtkAssembly建立了各个Actor 的层次结构以便在整个结构平移、旋转或缩放等变换时能够更合理地进行控制。
	   vtkActor::SetMapper(): 该方法用于设置生成几何图元的 Mapper,即连接一个Actor 到可视化管线的末端 (Mapper 是可视化管线的末端)。
	   关于可视化管线的内容可参考 2.4.2 节的内容
	**/
	vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
	cylinderActor->SetMapper(cylinderMapper);

	/**
	(5) vtkRenderer 负责管理场景的渲染过程。
	组成场景的对象包括 Prop,照相机 (kCamera)和光照(vtkLight)都被整合到一个 vtkRenderer 对象中。
	一个 vtkRenderWindow 中可以有多个vtkRenderer对象,而这些 vtkRenderer 可以染在窗口不同的矩形区域中(即视口)或者覆盖
	整个窗口区域。vtkRenderer::AddActor(): 该方法用于将 vtkProp 类型的对象添加到渲染场景中。
	vtkRenderer::SetBackground(): 该方法是从 vtkRenderer 的父类 vtkViewport 继承的,用于设置渲染场景的背景颜色,用R、G、B 的格式设置,
	三个分量的取值为 0.0~1.0。 (0.0,0.0.0.0)为黑色,(1.0,1.0,1.0)为白色。除了可以设置单一的背景颜色之外,还可以设置渐变的背景颜色,
	vtkViewport::SetBackground2()用于设置渐变的另外一种颜色,但是要使背景颜色渐变生效或者关闭,必须调用以下的方法。
	vtkViewport::SetGradientBackground(bool):参数为0时,关闭,反之,打开。vtkViewport::GradientBackgroundOn():该方法用于打开背景颜色渐变效果,
	相当于调用方法SetGradientBackground(1)。vtkViewport::GradientBackgroundOff(0): 该方法用于关闭背景颜色渐变效果。相当于调用方法 SetGradientBackground(0)。

	**/

	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(cylinderActor);
	renderer->SetBackground(0.1, 0.2, 0.4);


	/**
	(4)vtkRenderWindow
	将操作系统与VTK渲染引擎连接到一起不同平台下的vtkRenderWindow子类负责管理本地计算机系统中窗口创建和渲染过程。
	当使用VTK 开发应用程序时,只需要使用平台无关的vtkRendererWindow类,运行时,系统会自动替换为平台相关的 vtkRendererWindow 子类比如,
	Windows 下运行上述的 VTK 程序,实际创建的是 vtkWin320penGLRenderWindow(vtkRenderWindow 的子类)对象。
	vtkRenderWindow 中包含了 vtkRenderer 集合、渲染参数如立体显示(Stereo)、反走样、运动模糊(Motion Blur)和焦点深度 (Focal Depth)等。
	vtkRenderWindow::AddRenderer():该方法用于加入 vtkRenderer 对象。
	vtkRenderWindow::SetSize0: 该方法是从 vtkRenderWindow 的父类vtkWindow 继承过来的,用于设置窗口的大小,以像素为单位。
	**/
	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(renderer);
	renWin->SetSize(300, 300);


	/**
	6)vtkRenderWindowInteractor 提供平台独立的响应鼠标、键盘和时钟事件的交互机制,
	通过 VTK 的观察者/命令模式(请参考本书第 8 章内容)将监听到的特定平台的鼠标、键盘和时钟事件交由vtkInteractorObserver 或其子类,如 vtkInteractorStyle 进行处理。
	vtkInteractorStyle 等监听这些消息并进行处理以完成旋转、拉伸和缩放等运动控制。
	vtkRenderWindowInteractor 会自动建立一个默认的3D 场景交互器样式(Interactor Style):vtkInteractorStyleSwitch,
	当然也可以选择其他交互器样式或者创建自己的交互器样式,如本例中使用的 vtkInteractorStyleTrackballCamera。
	vtkRenderWindowInteractor:SetRenderWindow(): 该方法用于设置染窗口,消息是通过渲染窗口捕获到的,所以必须给交互器对象设置渲染窗口。
	vtkRenderWindowInteractor::SetInteractorStyle0): 该方法用于定义交互器样式,默认的交瓦器样式为vtkInteractorStyleSwitch。
	vtkRenderWindowInteractor::Initialize():该方法表示为处理窗口事件做准备,交互器工作之前必须先调用这个方法进行初始化。
	vtkRenderWindowInteractor::Start();该方法表示开始进入事件响应循环,交互器处于等待状态,等待用户交互事件的发生。进入事件响应循环之前必须先调用 Initialize0方法。
	**/
	vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	iren->SetRenderWindow(renWin);


	/**
	(7)vtkInteractorStyleTrackballCamera交互器样式的一种。
	该样式下,用户通过控制相机对物体作旋转、放大、缩小等操作。打个比方,在照相时如果要想物体拍起来显得大一些,可以采取两种做法:第一种做法是相机不动,
	让要拍的物体靠近相机;第二种做法是物体不动,让相机靠近物体。第二种做法就是 vtkInteractorStyleTrackballCamera 的风格。其父类为 vtkInteractorStyle,
	除了 vtkInteractorStyleTrackballCamera之外,VTK 还定义了其他多种交互器样式,如vtkInteractorStylelmage,主要用于显示二维图像时的交五
	**/
	vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera> ::New();
	iren->SetInteractorStyle(style);

	iren->Initialize();
	iren->Start();

	return 0;

} 

运行结果:

 送鸡汤:无论你有多笨,只要肯坚持,都能达到你的目标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1391083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot项目中简单使用虚拟机Redis

目录 步骤大致如下&#xff1a; 一.在pom文件中加入redis依赖 二.在虚拟机上打开我们下载好的Redis。开启服务器端并获取虚拟机ip地址 三.在项目配置。 四&#xff1a;使用redis 测试 redis是一个以键值对存储的NoSQL。被数百万开发人员用作缓存、矢量数据库、文档数据库、…

SpringBoot-项目复制

Spring Boot是一个用于简化Java应用程序开发的框架&#xff0c;它提供了自动配置和约定优于配置的原则。项目复制是指通过复制现有的Spring Boot项目来创建一个新的项目&#xff0c;以便快速搭建基于相似功能或结构的应用程序。项目复制可以减少类似项目的开发时间、提高生产力…

MongoDB 环境搭建及使用详解

文章目录 1、安装1.1 window平台安装MongoDB1.2 Linux系统中安装启动和连接 2、MongoDB连接3、MongoDB 概念数据库&#xff08;DATABASE&#xff09;文档&#xff08;Document&#xff09;集合元数据 4、常用语法创建数据库删除数据库创建集合查看创建的集合删除集合文档CRUD 5…

Rust 错误处理(上)

目录 1、用 panic! 处理不可恢复的错误 对应 panic 时的栈展开或终止 1.1 使用 panic! 的 backtrace 2、用 Result 处理可恢复的错误 2.1 匹配不同的错误 2.2 失败时 panic 的简写&#xff1a;unwrap 和 expect 2.3 传播错误 错误是软件中不可否认的事实&#xff0c;所…

Kafka详解及常见面试问题解析(值得珍藏)

1. 定义 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。它是一种高吞吐量的分布式发布订阅消息系统&#xff0c;可以处理消费者在网站中的所有动作流数据。这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xff09;是在…

Visual Studio 2022 成功配置QT5.12.10

目录 下载并安装Visual Studio 2022 Qt5.12.10下载 Qt5.12.10安装 Qt VS Tools for Visual Studio 2022下载 Visual Studio 2022配置 测试 下载并安装Visual Studio 2022 下载社区版并安装&#xff0c;这个比较快。 Qt5.12.10下载 官网下载很慢&#xff0c;还不如百度网…

【加强版】小学数学出题,加减乘除混合运算,支持自定义数字,一键打印

在线预览&#xff1a;在线HTML代码预览和运行工具 - UU在线工具 复制下面代码后到该地址预览即可 注意&#xff1a;在线预览不能打印。如需打印&#xff0c;在电脑本地上新建文本文档&#xff0c;粘贴代码后保存&#xff0c;然后把文件后缀改为.html运行&#xff0c;出题点击…

不同打包工具下的环境变量配置方式对比

本文作者为 360 奇舞团前端开发工程师 天明 前言 在现代的JavaScript应用程序开发中&#xff0c;环境变量的配置是至关重要的。不同的应用场景和部署环境可能需要不同的配置&#xff0c;例如开发、测试和生产环境。最常见的需求是根据不同的环境&#xff0c;配置如是否开启sour…

如何编译openssl的早期版本的共享库,如openssl 1.0

背景介绍 最近在为客户排查问题的时候&#xff0c;发现客户提供的日志是加密的&#xff0c;解密工具依赖到了openssl 1.0的共享库。可是手头没有这么老版本的openssl共享库。因此只好手动编译一个出来。 编译步骤 因为openssl 1.0是比较老的版本&#xff0c;很多系统上的库已…

如何安装“MySQL在虚拟机ubuntu”win10系统?

1、 更新列表 sudo apt-get update 2、 安装MySQL服务器 sudo apt-get install mysql-server 3、 安装MySQL客户端 sudo apt-get install mysql-client 4、 配置MySQL sudo mysql_secure_installation 5、 测试MySQL systemctl status mysql.service MySQL数据库基本…

数学建模常见算法的通俗理解(更新中)

目录 1.层次分析法&#xff08;结合某些属性及个人倾向&#xff0c;做出某种决定&#xff09; 1.1 粗浅理解 1.2 算法过程 1.2.1 构造判断矩阵 1.2.2 计算权重向量 1.2.3 计算最大特征根 1.2.4 计算C.I.值 1.2.5 求解C.R.值 ​1.2.6 判断一致性 1.2.7 计算总得分 2 神…

武理多媒体信息共享平台的架构设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

开发知识点-java基础

java基础知识整理 windows 多版本java jar包不能直接打开 需要java -jar问题解决 windows 多版本 控制面板 java15 download 多版本 https://www.cnblogs.com/chenmingjun/p/9941191.html https://gitee.com/shixinke/JC-jEnv/repository/archive/master.zip java jar包不…

Packet Tracer - Layer 2 VLAN Security

Packet Tracer - 第二层VLAN安全配置任务 目标 在SW-1和SW-2之间建立新的冗余链路。在新连接的SW-1和SW-2之间的干线链路上启用中继并配置安全措施。创建一个新的管理VLAN&#xff08;VLAN 20&#xff09;并将一台管理PC连接到该VLAN。实施ACL以防止外部用户访问管理VLAN。 背…

【全】OpenSSL创建生成CA证书、服务器、客户端证书及密钥说明

本文章对应的文档:使用OpenSSL创建生成CA证书服务器客户端证书及密钥资源-CSDN文库 https://download.csdn.net/download/weixin_41885845/88746920 对于SSL单向认证 服务器需要CA证书、server证书、server私钥,客户端需要CA证。 对于SSL双向认证 服务器需要CA证书、serv…

前端下载文件流,设置返回值类型responseType:‘blob‘无效的问题

前言&#xff1a; 本是一个非常简单的请求&#xff0c;即是下载文件。通常的做法如下&#xff1a; 1.前端通过Vue Axios向后端请求&#xff0c;同时在请求中设置响应体为Blob格式。 2.后端相应前端的请求&#xff0c;同时返回Blob格式的文件给到前端&#xff08;如果没有步骤…

48 分布式id的生成策略

1.UUID 1.UUID (Universally Unique Identifier)&#xff0c;通用唯一识别码。UUID是基于当前时间、计数器&#xff08;counter&#xff09;和硬件标识&#xff08;通常为无线网卡的MAC地址&#xff09;等数据计算生成的。UUID由以下几部分的组合&#xff1a; 1.当前日期和时…

如何在内存中绘制透明位图

如何在内存中绘制透明位图 如何绘制透明位图&#xff1f;这类文章网上有很多&#xff0c;都是同一个套路&#xff0c;当然也包括我这篇&#xff01; 不同的是&#xff0c;我重新整理了代码&#xff0c;见“ysouyno/t_transparent_memory_dc”。同时附上完整的工程“t-transpa…

leetcode82. 删除排序链表中的重复元素 II

文章目录 题目思路1复杂度Code2 思路2复杂度2Code2 题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;…

已实现:JS如何根据视频的http(s)地址,来截取帧图片,并实现大图压缩的功能

现在&#xff0c;我们已经有了视频的http地址&#xff0c;我们怎么截取帧图片呢&#xff1f;我以Vue为基础架构&#xff0c;来写写代码。 1、先写布局&#xff0c;先得有video&#xff0c;然后得有canvas <video id"videoPlay" style"width: 100%; height:1…