4.vtk光照vtkLight
文章目录
- VTK中的光照
- 1. vtkLight 的两种类型:位置光照和方向光照
- 2. vtkLight 的常用方法
- 3. 方法命名风格
- 4. vtkProp 的可见性与 vtkLight 的开关
- 示例
VTK中的光照
vtkLight: 用于定义一个或多个光源。每个光源可以有其颜色、位置、焦点等属性。
vtkActor: 每个vtkActor对象(代表场景中的一个对象)都有自己的属性,包括材质属性(material properties),这些属性决定了该对象如何响应光。
vtkRenderer: 负责管理场景中的所有元素,包括光源和actor,并且控制着场景的最终渲染。
1. vtkLight 的两种类型:位置光照和方向光照
位置光照 (Positional Light):也称为聚光灯(Spotlight)。光源的位置在渲染场景中的某个具体点。可以指定光源的衰减值、锥角等参数,模拟现实世界中的灯光效果。示例:台灯、手电筒等。方向光照 (Directional Light):光源位于无穷远处,光线被认为是平行的。常用于模拟自然界的太阳光。默认情况下,vtkLight 是方向光照。
关键点: 光源的方向由其位置 (SetPosition) 和焦点 (SetFocalPoint)
的连线决定。如果光源是方向光照,则它的位置可以看作是无穷远,而方向由焦点决定。
2. vtkLight 的常用方法
以下是 vtkLight 提供的一些常用方法及其作用: (1) 设置光照颜色
SetColor(double r, double g, double b):设置光源的颜色,使用 RGB 格式。参数范围通常是 [0.0, 1.0]。示例:light->SetColor(1.0, 0.0, 0.0); 将光源颜色设置为红色。
(2) 设置光源位置
SetPosition(double x, double y, double z):设置光源的位置。对于位置光照,这是光源的具体坐标。对于方向光照,这是光源的方向向量。
(3) 设置焦点
SetFocalPoint(double x, double y, double z):设置光源的焦点。光源的方向是从光源位置指向焦点。
(4) 设置光照强度
SetIntensity(double intensity):设置光源的强度,默认值为 1.0。强度越高,光照越亮。
(5) 打开或关闭光源
SetSwitch(int onOff) / SwitchOn() / SwitchOff():控制光源的开关状态。SetSwitch(1) 或 SwitchOn() 表示打开光源。SetSwitch(0) 或 SwitchOff() 表示关闭光源。GetSwitch() 返回当前光源的开关状态。
3. 方法命名风格
VTK 中的方法命名遵循一定的模式,便于理解和使用。以下是常见的命名风格:
SetXXX() 和 GetXXX():SetXXX() 用于设置某个属性的值。GetXXX() 用于获取某个属性的当前值。
示例
light->SetIntensity(2.0); // 设置光照强度为 2.0
double intensity = light->GetIntensity(); // 获取当前光照强度
XXXOn() 和 XXXOff():
XXXOn() 等价于 SetXXX(1),表示开启某个属性。 XXXOff() 等价于 SetXXX(0),表示关闭某个属性。
示例
light->SwitchOn(); // 打开光源
light->SwitchOff(); // 关闭光源
SetPositional() 和 GetPositional():
SetPositional(int) 用于设置光源是否为位置光照。SetPositional(1) 表示启用位置光照。SetPositional(0) 表示禁用位置光照(即使用方向光照)。 GetPositional() 返回当前光源是否为位置光照。
示例:
light->SetPositional(1); // 启用位置光照
bool isPositional = light->GetPositional(); // 检查是否为位置光照
4. vtkProp 的可见性与 vtkLight 的开关
在 VTK 中,类似的命名风格不仅适用于 vtkLight,还适用于其他类,例如 vtkProp(所有可视化对象的基类)。以下是一些类比:
vtkProp 的可见性控制:SetVisibility(int) / GetVisibility() / VisibilityOn() / VisibilityOff()。
示例:
actor->VisibilityOn(); // 显示对象
actor->VisibilityOff(); // 隐藏对象
vtkLight 的开关控制:
SetSwitch(int) / GetSwitch() / SwitchOn() / SwitchOff()。
示例:
light->SwitchOn(); // 打开光源
light->SwitchOff(); // 关闭光源
示例
#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkAutoInit.h>
#include <vtkSphereSource.h>
#include <vtkLineSource.h>
#include <vtkPlaneSource.h>
#include <vtkLight.h>
#include <vtkNamedColors.h>
using namespace std;VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);int main()
{vtkNew<vtkNamedColors> colors;// 创建球体数据源vtkNew<vtkSphereSource> sphereSource;sphereSource->SetCenter(0.0, 0.0, 0.0);sphereSource->SetRadius(1.0);// 映射器vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputConnection(sphereSource->GetOutputPort());// 创建演员vtkNew<vtkActor> actor;actor->SetMapper(mapper);actor->GetProperty()->SetColor(colors->GetColor3d("MistyRose").GetData());// 渲染器vtkNew<vtkRenderer> renderer;renderer->AddActor(actor);renderer->SetBackground(0.0, 1.0, 0.0);// 添加光源vtkNew<vtkLight> light;light->SetPositional(1); // 设置为位置光照light->SetPosition(1, 1, 1);light->SetFocalPoint(0, 0, 0);light->SetConeAngle(30);light->SetDiffuseColor(colors->GetColor3d("White").GetData());light->SetSpecularColor(colors->GetColor3d("White").GetData());light->SetIntensity(2.0); // 设置光照强度light->SwitchOn(); // 打开光源//light->SwitchOff();renderer->AddLight(light);// 渲染窗口vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(renderer);renderWindow->SetSize(640, 480);renderWindow->SetWindowName("LightingExample");// 渲染窗口交互器vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;renderWindowInteractor->SetRenderWindow(renderWindow);// style风格vtkNew<vtkInteractorStyleTrackballCamera> style;renderWindowInteractor->SetInteractorStyle(style); // 修正:通过交互器设置样式// 开始渲染renderWindow->Render();renderWindowInteractor->Start();return 0;
}
相关文章:
4.vtk光照vtkLight
文章目录 VTK中的光照1. vtkLight 的两种类型:位置光照和方向光照2. vtkLight 的常用方法3. 方法命名风格4. vtkProp 的可见性与 vtkLight 的开关 示例 VTK中的光照 vtkLight: 用于定义一个或多个光源。每个光源可以有其颜色、位置、焦点等属性。 vtkActor: 每个vtk…...
定义AIDL 接口
目录 定义 AIDL 接口创建 .aidl 文件实现 AIDL 接口向客户端公开接口接口的版本兼容性小结1. 定义 AIDL 接口 AIDL 接口是什么? 概念 AIDL(Android 接口定义语言)用来定义跨进程通信(IPC)的接口。简单来说,它规定了客户端和服务端之间如何进行数据交换和方法调用。.aidl…...
Linux系统-scp命令--两台服务器之间传输文件
一、定义 scp是secure copy的简写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,可以在linux服务器之间复制文件和目录,scp传输是加密的,可能会稍微影响一下速度。另外,scp还非常不占资源,不会提…...
Visual Studio + OpenCV C++ 安装与配置教程
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,广泛用于图像处理、视频分析、模式识别和机器学习等领域。它由Intel公司于1999年发起,并在2000年由Willow Garage(一个机器人研究机构)进一步开发和维护。OpenCV支持多种编程语言,包括C++、Python…...
怎么通过OPPO手机进行图片编辑?图片编辑攻略,打造专业级照片
在当今数字化时代,手机摄影已成为记录生活、分享瞬间的重要方式。而作为市场上广受欢迎的智能手机品牌之一,OPPO手机不仅在摄影硬件上表现出色,其内置的图片编辑功能也极为强大,能够满足使用者从基础调整到高级创作的各种需求。本…...
基于MFC 的链接库
1. 动态库 MFC Regular dll: ① DLL内部有一个CWinApp类全局对象(像是基于mfc的exe程序那样存在一个theApp),该CWinApp类的Initstance负责执行dll内部初始化。 ② DLL不能人为提供Dllmain函数,该函数由mfc库提供。 ③在visual studio 的工程配置中&a…...
2025.04.15【Connection】| 生信数据可视化:连接图绘制指南
文章目录 生信数据可视化:连接图绘制指南什么是连接地图?为什么使用连接地图?如何在R中创建连接地图?1. 安装和加载必要的库2. 准备数据3. 计算大圆航线的距离和方位角4. 创建连接地图 高级技巧1. 自定义地图样式2. 添加地理背景 …...
回溯算法:List 还是 ArrayList?一个深拷贝引发的思考
在学习和使用回溯算法解决问题时,我们经常会遇到需要维护一个结果列表,例如所有可能的子集、组合或排列。 这个结果列表通常是一个 List<List<Integer>>,其中内部的 List<Integer> 代表一个具体的解。 然而,在…...
WPS表格中设置折线图随数据列自动变化——存钱计划
效果展示: wps自动更新表格 1.公式>名称管理器>新建 2.修改名称和引用位置 OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1) 3.插入>图表 4.右键>选择数据 5.添加,输入名称和系列值。 Sheet1!名称管理器里的名字 标签分类里也填入 6如图…...
内网Windows挂载目录到公网服务器
工程目的 最近在研究图像生成,Stable Diffusion的各种模型尤其3.5以后大的飞起来,动不动五六十G,以往上传到服务器费时费力占带宽又占存储空间,更关键的是用学校服务器只能校园网才能上,上传传个半天第二天来一看发现…...
ffmpeg命令(一):信息查询命令
媒体文件信息查看 命令说明ffmpeg -i input.mp4查看媒体文件基本信息(封装格式、编解码器、时长等)ffprobe input.mp4使用专用工具查看详细信息ffprobe -v error -show_format -show_streams input.mp4输出格式和流的详细信息ffprobe -v quiet -print_f…...
2 cline 提示词工程指南-记忆库
cline 提示词工程指南-记忆库 前言 编程,就是搭建一个系统,该系统在编程过程中逐步长成,最后该系统可以完成某个具体任务。 显然,编程是一个需要仔细规划、逐步推进的系统性、流程性、逻辑性工作。 我们的 ai 能胜任么&#x…...
VueDOMPurifyHTML 防止 XSS(跨站脚本攻击) 风险
VueDOMPurifyHTML 是一个 Vue.js 插件,用于在 v-html 指令中安全地渲染 HTML 内容,防止 XSS(跨站脚本攻击) 风险。 作用 解决 v-html 的安全问题 Vue 的 v-html 会直接渲染原始 HTML࿰…...
关于SQLite轻量数据库的研究
安装本地SQLite 下载地址: https://www.sqlite.org/download.html 下载这两个包 解压到本地,得到这几个文件: 将解压后的目录添加到Path环境变量中: 在cmd中输入 “sqlite3” 和 “.open D:\work\sqliteInstall\mytestdb.…...
使用Python爬取豆瓣电影Top250并保存到Excel完整教程
在当今数据驱动的时代,获取和分析网络数据已成为许多领域的重要技能。本文将详细介绍如何使用Python爬取豆瓣电影Top250榜单数据,并将结果保存到Excel文件中。这个项目不仅适合Python初学者学习网络爬虫基础,也能帮助数据分析师获取有价值的电…...
Redis + Caffeine打造超速两级缓存架构
背景 接口的逻辑非常简单:根据传入的城市、仓库和发货时间,查询快递的预计送达时间。 然而,由于会频繁调用这个接口,尤其是在大促期间,接口的性能要求极高。 数据量虽然不大,但为了确保接口的高性能和高…...
讲讲String类的常用函数
String类在开发过程中经常用到,这里来总结一下。 1.声明与初始化 std::string str;//声明 std::string str "Hello, World!";//初始化 2.连接 std::string str1 "Hello, "; std::string str2 "World!"; std::string result …...
Sentinel实战教程:流量控制与Spring Boot集成
Sentinel实战教程:流量控制与Spring Boot集成 1. Sentinel简介与核心概念 1.1 什么是Sentinel? Sentinel是阿里巴巴开源的流量控制组件,主要用于微服务架构中的流量防护。它通过限流、熔断、热点防护等机制,帮助系统在高并发场景下保持稳定运行。 1.2 核心功能与术语 流…...
【计算机系统结构】MIPSsim
目录 双击MIPSsim.exe 问题1:Microsoft Defender SmartScreen阻止了无法是被的应用启动,运行此应用可能会导致你的电脑存在风险 解决 出现下面的问题的话,建议直接在官网下载 问题2:.NET Framework 3.5安装错误代码0x80240438 …...
Charles 安装与使用详解:实现 App 与小程序 HTTPS 抓包
在日常的移动端开发、接口调试或逆向分析中,我们经常需要抓取移动 App 或微信小程序的 HTTP/HTTPS 请求。Charles 是一款经典强大的代理抓包工具,凭借简单的界面和强大的功能,成为了 macOS 抓包的首选工具之一。 本文将详细介绍 Charles 的安…...
0415美团面试题目详解
基础知识型,基础知识!!! margin-top:100%(基于父元素宽度) “margin-top: 100% 表示元素的上外边距为父元素宽度的 100%。例如,若父元素宽 300px,则上边距为300px。需注意,CSS 中垂直方向的百分比边距(如 margin-top/margin-bottom)均基于父元素宽度计算,而非高度。这…...
【微信小程序】报错: http://127.0.0.1:7001 不在以下 request 合法域名列表中
问题 微信小程序报错: http://127.0.0.1:7001 不在以下 request 合法域名列表中,请参考文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html(env: Windows,mp,1.05.2204250; lib: 3.0.2) 解决方法: 详…...
go的json unmarshal和 k8s的deepcopy对比
Go 的 encoding/json.Unmarshal 和 Kubernetes 的 DeepCopy 虽然都依赖反射,但性能差异显著。以下是两者的对比分析及性能优化原理: 一、反射实现差异 1. json.Unmarshal 的反射特点 动态类型解析:需在运行时解析 JSON 结构,通过…...
1. k8s的简介
Kubernetes(k8s)简介 1. 产生背景 随着云计算和微服务架构的兴起,传统的单体应用逐渐被拆分为多个小型、松耦合的服务(微服务)。这种架构虽然提升了开发灵活性和可维护性,但也带来了新的挑战:…...
华为云CloudMatrix 384 超节点将有数万规模上线,赋能AI产业发展
近日,华为公司副总裁张修征表示,华为云 CloudMatrix 384 超节点今年上半年将有数万规模的上线,这或将彻底终结算力焦虑。未来,CloudMatrix 超节点可以构建超过万片的大集群来提供算力。 CloudMatrix 384超节点 华为云 CloudMatri…...
Java基础 4.15
1.重载方法练习 /* 类Methods中定义三个重载方法并调用 方法名为m 分别接受一个int参数 两个int参数 一个字符串参数 分别执行平方运算并输出 相乘并输出结果 输出字符串信息 在main()方法中分别用参数区别调用三个方法 */ public class OverLoadExercise01 {public static v…...
现代c++获取linux系统架构
现代c获取linux系统架构 前言一、使用命令获取系统架构二、使用c代码获取系统架构三、验证四、总结 前言 本文介绍一种使用c获取linux系统架构的方法。 一、使用命令获取系统架构 linux系统中可以使用arch或者uname -m命令来获取当前系统架构,如下图所示 archuna…...
shell编程之函数与数组
目录 shell函数 函数的用法 俩个数求和 系统资源监控并报警函数 函数变量的作用范围 函数的参数 递归函数 shell数组 获取数组的长度 读取某下的标赋值 数组遍历 数组切片 数组替换 数组删除 shell脚步调试 shell函数 函数的用法 Shell函数可用于存放一系列的…...
IntelliJ IDEA 中最常用的快捷键分类整理
以下是 IntelliJ IDEA 中最常用的快捷键分类整理,适用于 Windows/Linux(Mac 用户将 Ctrl 替换为 ⌘,Alt 替换为 Option): 一、编辑相关 快捷键功能说明Ctrl Space基础代码补全Ctrl Shift Space智能类型补全Ctrl P…...
大数据面试问答-Kafka/Flink
1. Kafka 1.1 定位 分布式流数据平台,核心解决三大问题: 高吞吐的实时数据管道:支持每秒百万级消息处理。 持久化的消息队列:消息持久化到磁盘,支持多订阅者。 流式数据处理:与 Flink/Spark Streaming 集…...
工厂园区光储充能量管理系统解决方案——助力高效用能与低碳运营
园区痛点:电费高、能效低、碳排压力大 安科瑞 郭海棚 198 21380729 电费成本高:峰谷电价差显著,尖峰时段用电成本激增。设备能效低:老旧设备能耗高,缺乏实时监控与优化手段。供电稳定性差:生产设备突发停电…...
Windows10下Jekyll博客部署全指南|解决GitHub模板运行失败问题
场景:在GitHub拉取的一个Jekyll博客网站运行不起来 这是想要实现的效果 这是项目代码 概要 前置要求 git版本控制工具已安装windows10环境GitHub可以正常上网 相关问题 Jekyll博客部署常见错误GitHub模板运行失败解决方法Windows10环境变量配置Ruby版本兼容性问…...
数字IC设计-VCS和Verdi的使用
#学习记录# 前言:本文以一个简单的计数器来说明vcs和verdi的使用 1 代码文件 1.1 计数器代码 //Engineer:Mr-pn-junction module counter(input clk,input rst,output reg [5:0] count); always(posedge clk or negedge rst)beginif(!rst)coun…...
FastAPI基础知识点精要
一、核心性能优势 1. 异步编程支持 原生async/await语法:支持非阻塞IO操作,轻松处理高并发场景ASGI协议实现:基于Starlette框架构建,支持WebSocket等实时协议性能基准:测试显示响应速度比Flask快3-5倍&…...
<uniapp><websocket><http>基于uniapp,手机客户端通过websocket进行数据通讯(二维码扫码数据)
前言 本专栏是基于uniapp实现手机端各种小功能的程序,并且基于各种通讯协议如http、websocekt等,实现手机端作为客户端(或者是手持机、PDA等),与服务端进行数据通讯的实例开发。 发文平台 CSDN 环境配置 系统:windows 平台:visual studio code、HBuilderX(uniapp开…...
GitLab-获取token(访问令牌)
一、操作步骤 GitLab-获取token(访问令牌)主要步骤:以及相关截图 登录 GitLab 打开 GitLab 网站并登录你的账号。 进入用户设置 点击右上角头像 → Edit profile → 左侧菜单选择 Access Tokens。 创建 Token Token name: 输入名称&#…...
python 安装win32com.client库
win32com.client是Python中用于操作Windows COM对象的强大模块,特别适合与Microsoft Office应用程序(如Word、Excel、Outlook等)进行交互。 1. 安装win32com.client 需要安装pywin32库: pip install pywin32如果安装失败或速度慢,可以使用国…...
流量统计--Maven依赖
新建项目Flow 创建依赖,在pm.xml里添加如下内容: <!-- 添加hadoop-client 3.1.3的依赖--> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>…...
L1-6 大勾股定理(PTA)
大勾股定理是勾股定理的推广:对任何正整数 n 存在 2n1 个连续正整数,满足前 n1 个数的平方和等于后 n 个数的平方和。例如对于 n1 有 324252;n2 有 102112122132142 等。给定 n,本题就请你找出对应的解。 输入格式: …...
HarmonyOS-ArkUI V2装饰器: @Computed装饰器:计算属性
引 @Computed是用来装饰一个自己写的getter方法的装饰器,它可以让您像用平常的状态变量那样去用这个getter方法。那么getter方法里怎么获取的值,必然涉及到您写的逻辑。这个逻辑可以是很复杂的一种计算方式,经过一系列复杂方式计算完您吐出相应的结果即可。 为了便于理解,…...
豆瓣图书数据采集与可视化分析
文章目录 一、适用题目二、豆瓣图书数据采集1. 图书分类采集2. 爬取不同分类的图书数据3. 各个分类数据整合 三、豆瓣图书数据清洗四、数据分析五、数据可视化1. 数据可视化大屏展示 源码获取看下方名片 一、适用题目 基于Python的豆瓣图书数据采集与分析基于Python的豆瓣图书…...
网络安全·工具篇1·Nmap的运用
今天我们要介绍网络安全中常用的一种扫描工具Nmap,它被设计用来快速扫描大型网络,主要功能包括主机探测、端口扫描以及版本检测,小编将在下文详细介绍Nmap相应的命令。 Nmap的下载安装地址为:Nmap: the Network Mapper - Free Se…...
MVCC详细介绍及面试题
目录 1.什么是mvcc? 2.问题引入 3. MVCC实现原理? 3.1 隐藏字段 3.2 undo log 日志 3.2.1 undo log版本链 3.3 readview 3.3.1 当前读 编辑 3.3.2 快照读 3.3.3 ReadView中4个核心字段 3.3.4 版本数据链访问的规则(了解&#x…...
designware IP如何被FPGA综合
DW的IP要被vivado等综合还是很麻烦的,而是用synplify等综合工具,然后再嫁接到vivado中也非常麻烦。本文提供一种解决办法。 1. 对DW的IP进行gtech综合。即使用DC工具对DW IP进行综合。而使用的综合库是gtech。脚本如下: set target_library…...
图像预处理-色彩空间补充,灰度化与二值化
一.图像色彩空间转换 1.1 HSV颜色空间 HSV颜色空间使用色调(Hue)、饱和度(Saturation)和亮度(Value)三个参数来表示颜色 一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本…...
C语言socket绑定本地端口和查询
查询 // 查询本地地址和端口(在没有绑定的情况下,系统会自动分配一个端口)struct sockaddr_in local_addr;socklen_t addr_len sizeof(local_addr);if (getsockname(sockfd, (struct sockaddr*)&local_addr, &addr_len) 0) {std::c…...
Centos7编译安装sudosh2
Centos7编译安装sudosh2 sudosh2简介安装sudoshCentos7编译安装sudosh2步骤 1:Debian安装 sudosh步骤 2:配置 sudosh步骤 3:查看会话记录重播会话注意事项 sudosh2简介 sudosh2项目地址: https://github.com/squash/sudosh2 虽然项目已经停…...
C#使用httpClient.PostAsync()界面卡死
背景:部分代码移植后运行到httpClient.PostAsync()时界面就卡死。 代码片段: 解决办法: 把HttpResponseMessage response await httpClient.PostAsync(requestUrl, content); 改为HttpResponseMessage response httpClient.PostAsync(req…...
基于深度学习的狗鼻纹身份识别
基于深度学习的狗鼻纹身份识别 1. 技术背景 根据GMI报告,2020年全球宠物护理市场规模超过2320亿美元。随着宠物经济的快速发展,宠物福利问题日益突出。在宠物管理、交易、保险、医疗等许多场景中,宠物识别是一个具有挑战性的问题࿰…...
面试题:Eureka和Nocas的区别
Eureka 与 Nacos 核心区别对比 一、功能定位与核心能力 维度EurekaNacos核心功能专注服务注册与发现,无配置管理功能:ml-citation{ref“1,3” data“citationList”}集成服务注册、发现、配置管理、动态DNS等:ml-citation{ref“1,3” data“c…...