vtk创建x,y,z轴

创建三维空间中的xyz轴

  • 引言
  • 示例
    • 开发环境
    • 示例代码
    • 运行结果
    • 总结

引言

本文的示例实际上是vtk官网中的示例,只是稍做了一点改动。

示例

开发环境

使用QtCreator4.11.2来开发,基于Qt5.14.2。使用的vtk9.2。创建空项目。

示例代码

由于是空项目,所以这里提供了pro文件的内容:
.pro

QT       += core#greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11 vtk9.2# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cppSOUPDIR = $$PWD/../../SOUPdependency
vtk9.2 {contains(QT_ARCH, x86_64) {include($$SOUPDIR/vtk-9.2/vtk-9.2.pri)} else {include($$SOUPDIR/vtk-9.2-2017-omp-win32/vtk-9.2.pri)}DEFINES += vtkEventDataButton3D=vtkEventDataDevice3DDEFINES += vtkEventDataMove3D=vtkEventDataDevice3D
}# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

然后需要添加新文件main.cpp.
main.cpp

#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkNamedColors.h>
#include <vtkTransform.h>
#include <vtkAxes.h>
#include <vtkCamera.h>
#include <vtkNew.h>
#include <vtkAxesActor.h>
#include <vtkCaptionActor2D.h>
#include <vtkTextProperty.h>#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2)//渲染
VTK_MODULE_INIT(vtkInteractionStyle)//交互样式
VTK_MODULE_INIT(vtkRenderingFreeType)//文本图像
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)//体素int main(int argc,char *argv[])
{vtkNew<vtkNamedColors> colors;vtkNew<vtkSphereSource> sphereSource;//创建一个以原点为圆心的几何球体sphereSource->SetCenter(0.0,0.0,0.0);sphereSource->SetRadius(0.5);vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputData(sphereSource->GetOutput());vtkNew<vtkActor> actor;actor->SetMapper(mapper);vtkNew<vtkTransform> transform;transform->Translate(0.1,0.0,0.0);//创建一个转换矩阵vtkNew<vtkAxesActor> axesActor;//三维轴axesActor->SetUserTransform(transform);//设置用户转换轴//设置x坐标轴文本颜色及字体axesActor->GetXAxisCaptionActor2D()->GetCaptionTextProperty()->SetColor(colors->GetColor3d("Red").GetData());axesActor->SetXAxisLabelText("x");//设置x坐标轴文本//设置y坐标轴文本颜色及字体axesActor->GetYAxisCaptionActor2D()->GetCaptionTextProperty()->SetColor(colors->GetColor3d("Red").GetData());axesActor->SetYAxisLabelText("y");//设置y坐标轴文本//设置z坐标轴文本颜色及字体axesActor->GetZAxisCaptionActor2D()->GetCaptionTextProperty()->SetColor(colors->GetColor3d("Red").GetData());axesActor->SetZAxisLabelText("z");//设置z坐标轴文本vtkNew<vtkRenderer> render;render->AddActor(actor);//添加actor要在renderWindow->Render();之前render->AddActor(axesActor);render->SetBackground(colors->GetColor3d("SlateGray").GetData());render->GetActiveCamera()->Azimuth(50);//设置相机的方位角,水平方向旋转,正数——顺时针,负数——逆时针render->GetActiveCamera()->Elevation(30);//设置相机位置,上下方向,正数——相机向上移 负数——相机向下移render->ResetCamera();vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(render);renderWindow->SetWindowName("Axes");renderWindow->SetSize(400,400);renderWindow->Render();vtkNew<vtkRenderWindowInteractor> interactor;interactor->SetRenderWindow(renderWindow);interactor->Start();return 0;
}

运行结果

在这里插入图片描述

总结

以上创建过程中显示创建一个几何球体,然后将球体的数据加入到映射器,再设置到对象actor中。同时创建一个转换矩阵和三维轴对象axesActor,即x,y,z轴,三维轴对象axesActor通过用SetUserTransform设置转换矩阵,设置不同坐标轴的文本及文本颜色,最后将对象添加到渲染器render中,后面的步骤和其它的步骤一样,不再说明。
需要注意的是:渲染器的默认相机GetActiveCamera()设置的相机机位及相机方位角。对应的代码后有注释。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源大型语言模型(llm)总结

大型语言模型&#xff08;LLM&#xff09;是人工智能领域中的一个重要研究方向&#xff0c;在ChatGPT之后&#xff0c;它经历了快速的发展。这些发展主要涉及以下几个方面&#xff1a; 模型规模的增长&#xff1a;LLM的规模越来越大&#xff0c;参数数量显著增加。这种扩展使得…

抖音seo矩阵系统源码|需求文档编译说明(一)

抖音seo矩阵系统文章目录技术囊括 ①产品原型 ②需求文档 ③产品流程图 ④部署方式说明 ⑤完整源码 ⑥源码编译方式说明 ⑦三方框架和SDK使用情况说明和代码位置 ⑧平台操作文档 ⑨程序架构文档 短视频矩阵系统源码开发锦囊囊括前言一、短视频账号矩阵系统开发者必备能力语言&…

计算机视觉 + Self-Supervised Learning 五种算法原理解析

计算机视觉领域下自监督学习方法原理 导语为什么在计算机视觉领域中进行自我监督学习&#xff1f; 自监督学习方法Generative methodsBEiT 架构 Predictive methodsContrastive methodsBootstraping methodsSimply Extra Regularization methods 导语 自监督学习是一种机器学习…

【React】React Hooks解析

React Hooks解析 React 16.8 认识和体验Hooks 为什么需要Hook? Hook是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下使用state以及其他的React特性&#xff08;比如生命周期&#xff09; 我们先来思考一下class组件相对于函数式组件有什么优势&…

期末复习【计算机网络】

期末复习【计算机网络】 前言推荐期末复习如何快速阅读电子书重点第1章 概述1.6 计算机网络的性能1.6.2 计算机网络的性能指标√ 1.7 计算机网络体系结构1.7.3 具有五层协议的体系结构√ 第2章 物理层2.3 物理层下面的传输媒体 *2.4 信道复用技术2.4.1 频分复用、时分复用和统计…

node笔记_读写excel

文章目录 ⭐前言⭐安装依赖⭐读取excel&#x1f496; 按行读取&#x1f496; 按列读取 ⭐写入excel⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于node读取excel内容 往期文章 node_windows环境变量配置 node_npm发布包 linux_配置node node_nvm安装配置…

vivo 自研鲁班分布式 ID 服务实践

作者&#xff1a;vivo IT 平台团队- An Peng 本文介绍了什么是分布式ID&#xff0c;分布式ID的业务场景以及9种分布式ID的实现方式&#xff0c;同时基于vivo内部IT的业务场景&#xff0c;介绍了自研鲁班分布式ID服务的实践。 一、方案背景 1.1 分布式ID应用的场景 随着系统的…

【CV】EfficientNet相比resnet有哪些优点,什么是深度可分离卷积

目录 前言使用深度可分离卷积普通卷积的计算参数量深度可分离卷积分为两个步骤&#xff1a;深度卷积和逐点卷积 使用多个缩放因子使用 Swish 激活函数 前言 高效的神经网络主要通过&#xff1a;1. 减少参数数量&#xff1b;2. 量化参数&#xff0c;减少每个参数占用内存 目前的…

【2023年江西省研究生数学建模竞赛】题目三 植物的多样性 建模方案及参考文献

代码与结果如下&#xff1a;完整文档见文末 相关思路请点击这里到原文章查看 2023年江西省研究生数模竞赛题目三&#xff1a;植物的多样性 植物作为食物链中的生产者&#xff0c;通过光合作用吸收二氧化碳&#xff0c;制造氧气&#xff0c;同时为其他生物提供食物和栖息地&a…

MySQL数据库 – node使用

1 MySQL查询对象 2 MySQL查询数组 3 mysql2库介绍使用 4 mysql2预处理语句 5 mysql2连接池使用 6 mysql2的Promi 这里仅说明如何使用服务器连接数据库并进行操作。 预处理语句就是可以输入变量的语句&#xff08;表现形式是有符号&#xff1a;&#xff1f;&#xff09;。需…

spring源码编译笔记

下载源码 地址https://github.com/spring-projects/spring-framework/tree/v5.2.9.RELEASE 查看gradle对应版本 spring-framework-5.2.9.RELEASE/gradle/wrapper/gradle-wrapper.properties # 其他配置暂未了解具体用处&#xff0c;一切默认值 distributionBaseGRADLE_USE…

算法工程师提升工作效率的5个小工具

算法工程师在日常工作中大部分时间还是在和数据打交道。 诸如数据准备&#xff0c;数据清洗&#xff0c;特征分析(EDA) 等等。 这里给大家介绍我非常喜爱的5个处理数据的小工具&#xff0c; 也是我个人使用比较高频的几个工具&#xff0c;相信可以解决大家的一些痛点。 1&#…