VTK基本概念之光照

osgearth3.2设置光源位置及颜色 可以自定义光源位置,颜色,距离,角度,范围。 阅读详情

光照

  物体的光照属性主要包括环境光系数、漫反射光系数、镜反射光系数和镜面指数四个,分别用方法SetAmbient(),SetDiffuse(),SetSpecular()和SetSpecularPower()进行设置。
  
- 环境光系数表示各种光线照射到物体材质上,经过很多次发射后最终在环境中的光线强度。
- 漫反射光系数表示光线照射到物体材质上,经过漫反射后形成的光线强度。
- 镜反射系数表示光线照射到物体材质上,经过镜面反射后形成的光线强度。

  镜面指数的取值范围是0~128。该值越小,表示材质越粗糙,点光源发射的光线照射到上面,也可以产生较大的亮点;该值越大,表示材质越类似于镜面,光源照射到上面后,产生较小的亮点。

示例说明

CMakeLists.txt文件代码如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(Ambient)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(Ambient  Ambient.cpp)
TARGET_LINK_LIBRARIES(Ambient ${VTK_LIBRARIES})

Ambient.cpp文件代码如下:

#include "vtkSmartPointer.h"
#include "vtkSphereSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
#include "vtkLight.h"

int main()
{
    //创建多边形球体
    vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New();
    sphere->SetThetaResolution(100);
    sphere->SetPhiResolution(50);

    vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    sphereMapper->SetInputConnection(sphere->GetOutputPort());

    //actor是一个分组机制,除了将处理映射器的信息外,还具有属性及转换矩阵、光谱系数等参数
    //下面八个球体因为环境光的设置不同,其可见度将呈现变化
    vtkSmartPointer<vtkActor> sphereActor1 = vtkSmartPointer<vtkActor>::New();
    sphereActor1->SetMapper(sphereMapper);
    sphereActor1->GetProperty()->SetColor(1, 0, 0);
    sphereActor1->GetProperty()->SetAmbient(0.125);
    sphereActor1->GetProperty()->SetDiffuse(0.0);
    sphereActor1->GetProperty()->SetSpecular(0.0);

    vtkSmartPointer<vtkActor> sphereActor2 = vtkSmartPointer<vtkActor>::New();
    sphereActor2->SetMapper(sphereMapper);
    sphereActor2->GetProperty()->SetColor(1, 0, 0);
    sphereActor2->GetProperty()->SetAmbient(0.25);
    sphereActor2->GetProperty()->SetDiffuse(0.0);
    sphereActor2->GetProperty()->SetSpecular(0.0);
    sphereActor2->AddPosition(1.25, 0, 0);

    vtkSmartPointer<vtkActor> sphereActor3 = vtkSmartPointer<vtkActor>::New();
    sphereActor3->SetMapper(sphereMapper);
    sphereActor3->GetProperty()->SetColor(1, 0, 0);
    sphereActor3->GetProperty()->SetAmbient(0.375);
    sphereActor3->GetProperty()->SetDiffuse(0.0);
    sphereActor3->GetProperty()->SetSpecular(0.0);
    sphereActor3->AddPosition(2.5, 0, 0);

    vtkSmartPointer<vtkActor> sphereActor4 = vtkSmartPointer<vtkActor>::New();
    sphereActor4->SetMapper(sphereMapper);
    sphereActor4->GetProperty()->SetColor(1, 0, 0);
    sphereActor4->GetProperty()->SetAmbient(0.5);
    sphereActor4->GetProperty()->SetDiffuse(0.0);
    sphereActor4->GetProperty()->SetSpecular(0.0);
    sphereActor4->AddPosition(3.75, 0, 0);

    vtkSmartPointer<vtkActor> sphereActor5 = vtkSmartPointer<vtkActor>::New();
    sphereActor5->SetMapper(sphereMapper);
    sphereActor5->GetProperty()->SetColor(1, 0, 0);
    sphereActor5->GetProperty()->SetAmbient(0.625);
    sphereActor5->GetProperty()->SetDiffuse(0.0);
    sphereActor5->GetProperty()->SetSpecular(0.0);
    sphereActor5->AddPosition(0, 1.25, 0);

    vtkSmartPointer<vtkActor> sphereActor6 = vtkSmartPointer<vtkActor>::New();
    sphereActor6->SetMapper(sphereMapper);
    sphereActor6->GetProperty()->SetColor(1, 0, 0);
    sphereActor6->GetProperty()->SetAmbient(0.75);
    sphereActor6->GetProperty()->SetDiffuse(0.0);
    sphereActor6->GetProperty()->SetSpecular(0.0);
    sphereActor6->AddPosition(1.25, 1.25, 0);

    vtkSmartPointer<vtkActor> sphereActor7 = vtkSmartPointer<vtkActor>::New();
    sphereActor7->SetMapper(sphereMapper);
    sphereActor7->GetProperty()->SetColor(1, 0, 0);
    sphereActor7->GetProperty()->SetAmbient(0.825);
    sphereActor7->GetProperty()->SetDiffuse(0.0);
    sphereActor7->GetProperty()->SetSpecular(0.0);
    sphereActor7->AddPosition(2.5, 1.25, 0);

    vtkSmartPointer<vtkActor> sphereActor8 = vtkSmartPointer<vtkActor>::New();
    sphereActor8->SetMapper(sphereMapper);
    sphereActor8->GetProperty()->SetColor(1, 0, 0);
    sphereActor8->GetProperty()->SetAmbient(1.0);
    sphereActor8->GetProperty()->SetDiffuse(0.0);
    sphereActor8->GetProperty()->SetSpecular(0.0);
    sphereActor8->AddPosition(3.75, 1.25, 0);

    vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
    ren->AddActor(sphereActor1);
    ren->AddActor(sphereActor2);
    ren->AddActor(sphereActor3);
    ren->AddActor(sphereActor4);
    ren->AddActor(sphereActor5);
    ren->AddActor(sphereActor6);
    ren->AddActor(sphereActor7);
    ren->AddActor(sphereActor8);
    ren->SetBackground(0.1, 0.2, 0.4);
    //设置灯光及属性
    vtkSmartPointer<vtkLight> light = vtkSmartPointer<vtkLight>::New();
    light->SetFocalPoint(1.875, 0.6125, 0);
    light->SetPosition(0.875, 1.6125, 1);
    ren->AddLight(light);
    //如果想消除背景的阴暗,可以采用平行投射模式
    ren->GetActiveCamera()->SetFocalPoint(0, 0, 0);
    ren->GetActiveCamera()->SetPosition(0, 0, 1);
    ren->GetActiveCamera()->SetViewUp(0, 1, 0);
    ren->GetActiveCamera()->ParallelProjectionOn();
    ren->ResetCamera();
    ren->GetActiveCamera()->SetParallelScale(1.5);

    vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
    renWin->AddRenderer(ren);
    renWin->SetSize(400, 200);
    vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    iren->SetRenderWindow(renWin);

    //启动事件进入循环并开始渲染
    iren->Initialize();
    iren->Start();
    return EXIT_SUCCESS;
}

运行结果:

这里写图片描述

  在截图上,每个球体上方添加它的环境光系数,如下图所示。我们可以看出:随着环境光系数属性值的增加,球体越来越凉,但是看上去不像球体,而像个 2D的圆盘。这是因为其他光反射系数都为零了,因而没有很好地反映出现实中物体的实际光照属性。
  
这里写图片描述

用Python中的VTK库导入并显示Assembly的STL文件 使用Python 中的vtk库,实现对Assembly(装配体)STL文件的导入和显示。并且实现鼠标,键盘对零件,装配体的的交互。详细解析了实现该功能的python代码。并且讲述了如何在SolidWorks中导出STL文件以及SolidWorks,VTK的一些基本知识。............ 阅读详情

相关推荐

VTK修炼之道7_三维场景基本要素:光照

1.VTK中的光照长得什么样? 剧场里有各式各样的灯光,三维渲染场景中也一样,可以有多个光照存在。光照和相机是三维渲染场景必备的因素,如果没有指定,vtkRenderer会自动地创建默认的光照和相机。VTK里用类vtkLight来表示渲染场景中的光照。与现实中的灯光类似,VTK中的vtkLight实例也可以打开、关闭,设置光照的颜色,照射位置(即焦点),光照所在的位置,强度等等。 vt

沈春旭的博客 5695

VTK光照属性基本介绍与演示

环境光: 物体的光照属性包含了:环境光系数、漫反射光系数、镜反射光系数和镜面指数,设置他们的相应函数如下: 环境光系数:SetAmbient(  ); 漫反射光系数:SetDiffuse(); 镜反射光系数:SetSpecular(); 镜面指数:SetSpecularPower(); 介绍: 环境光系数:各种光线照射到物体材质上,经过多次反射后最终遗留再环境的光照强度。 漫反射光

thecentury的博客 1万+

使用VTK绘制漫反射球:实战演练

它可以帮助我们了解光线在物体表面的反射过程,是渲染引擎和光线追踪等领域的重要应用之一。本文将介绍如何使用VTK库绘制漫反射球,并附上相应的源代码。在本例中,我们使用了VTK库来绘制漫反射球,并且使用了漫反射光照模型来模拟光线在物体表面的反射过程。通过学习和使用这些技术,我们可以更深入地了解计算机图形学和物理学的相关知识。在本例中,我们将使用漫反射光照模型,这需要我们设置球体的表面法线和灰度值。运行上述代码,我们将会得到一个漂亮的红色漫反射球。通过调整不同的参数,我们可以创建出各种色彩和材质的漫反射球。

DevForge的博客 182

VTK设置光照

vtkNew<vtkVolumeProperty> volumeProperty; volumeProperty->SetInterpolationType(VTK_CUBIC_INTERPOLATION); //光线插值类型 volumeProperty->SetShade(0, 1); //打开或者关闭阴影测试 volumeProperty->SetAmbient(0.25); //环境光强 volumeProperty->SetDiffuse(0.8..

qq_33598781的博客 585

VTK光照处理

VTK (Visualization Toolkit) 提供了强大的光照处理功能,可以显著增强3D场景的视觉效果。

深之JohnChen的专栏 914

第二部分:VTK核心类详解(第21章 vtkLight光照类)

摘要 vtkLight是VTK中用于3D渲染的光照组件,支持三种光照类型:场景光源、相机光源和头灯。该类提供位置/方向控制、光照强度/颜色调节、开关状态等功能,支持环境光、漫反射光和镜面反射光模型。通过变换矩阵系统可实现坐标系转换,并采用抽象渲染接口适配不同后端(如OpenGL)。vtkLight是增强3D场景真实感的关键模块,为可视化系统提供灵活的光照控制能力。

仰望星空的博客 182

03-VTK基础概念(2)

3.3 光照 剧场里有各式各样的灯光,三维渲染场景中也一样,可以有多个光照存在。光照和相机是三维渲染场景必备的因素,如果没有指定(像3.1.1_RenderCylinder例子,我们没有给Renderer指定相机和光照),vtkRenderer会自动地创建默认的光照和相机。VTK里用类vtkLight来表示渲染场景中的光照。与现实中的灯光类似,VTK中的vtkLight实例也可以打开、关闭,设置...

weixin_30670151的博客 243

CESM2 实验笔记

文章目录1. 重新启动1.1 关于重启文件2. RUN_TYPE 初始化运行方式startupbranchhybrid3. branch 或者 hybrid运行的示例4. 其他声明5. 关于RESUBMIT 1. 重新启动 参考: https://bb.cgd.ucar.edu/cesm/threads/how-to-restart-cesm2-1-3-fhist-from-a-backup.5245/#post-36275 适用情况:模型运行因时间不足或其它原因中断,需要继续运行 方法1:将CONTIN

qq_38607066的博客 1万+

03-VTK基础概念(2) - 博客频道

剧场里有各式各样的灯光,三维渲染场景中也一样,可以有多个光照存在。光照和相机是三维渲染场景必备的因素,如果没有指定(像3.1.1_RenderCylinder例子,我们没有给Renderer指定相机和光照),vtkRenderer会自动地创建默认的光照和相机。VTK里用类vtkLight来表示渲染场景中的光照。与现实中的灯光类似,VTK中的vtkLight实例也可以打开、关闭,设置光照的颜色,照射

fanhenghui的专栏 1655

Dynamics 365 F&O 开发入门(一)-- 从零开始建表

从零开始一步一步教你在Dynamics 365 F&O中创建一个表

qq_48843110的博客 942

Understand-Anything:AI驱动的代码知识图谱,实现项目全局洞察与高效导航

在软件开发中,理解复杂代码库的结构和依赖关系是提升开发效率的关键。传统代码阅读方式往往陷入局部视角,难以快速把握系统全貌。知识图谱技术通过将代码实体(如文件、类、函数)及其关系(调用、继承、依赖)可视化,为代码理解提供了全局视角。这项技术的核心价值在于将静态代码转化为动态、可交互的认知地图,极大降低了系统学习与维护成本。在实际工程中,它广泛应用于新成员快速入职、遗留系统梳理、架构影响分析等场景。本文介绍的Understand-Anything工具,正是基于这一理念,通过多智能体分析管道,自动构建代码的结构图

weixin_42615290的博客 883

【VTK 学习笔记】体绘制

文章目录参考资料体绘制管线光线投射法vtkPiecewiseFunction 分段线性函数颜色传输函数光照与阴影 参考资料 https://zhuanlan.zhihu.com/p/338223153 VTK图形图像开发进阶 体绘制管线 #!/usr/bin/env python import vtk def main(): fileName = './MRHead.mha' #renWin 背景颜色 colors = vtk.vtkNamedColors()

NirReb的博客 2684

计算分子相似度(摩根分子指纹计算)

import numpy as np import pandas as pd import seaborn as sns import matplotlib as plt from rdkit.Chem import Draw from rdkit.Chem import AllChem as Chem from rdkit.Chem import PandasTools from rdkit import DataStructs data = pd.read_csv(r'47_covidLead.csv'

weixin_39417324的博客 1388

VTK_Learning_光照

1.VTK中的光照长得什么样? 剧场里有各式各样的灯光,三维渲染场景中也一样,可以有多个光照存在。光照和相机是三维渲染场景必备的因素,如果没有指定,vtkRenderer会自动地创建默认的光照和相机。VTK里用类vtkLight来表示渲染场景中的光照。与现实中的灯光类似,VTK中的vtkLight实例也可以打开、关闭,设置光照的颜色,照射位置(即焦点),光照所在的位置,强度等等。vtkLigh...

weixin_38293453的博客 293

手把手教你学SOC芯片架构--NoC(片上网络,Network on Chip)全方位解析

​、​。

MHD0815的博客 871

NVIDIA Isaac Sim 入门教程(一)

文档分为以下几个部分: 简介、安装指南、API 文档、教程、手册和参考资料。简介部分是对 Omniverse Isaac Sim 的基本概述,以及它如何融入 NVIDIA Omniverse™ 生态系统。它还概述了 Omniverse Isaac Sim 的架构、工作流程和文档布局。

机器人控制与仿真应用 1万+

第06章 10 VTK 中体光照绘制

体光照绘制(Volume Rendering with Lighting)是一种通过模拟光线与体数据之间的相互作用来生成高质量三维图像的技术。在 VTK 中,可以使用不同的体绘制方法来实现这种效果

捕鲸叉的专栏 1273

LSTM 双向 Bi-LSTM

LSTM 双向 Bi-LSTM

jacke121的专栏 1518

VTK学习之光照和相机

链接:https://pan.baidu.com/s/11b634VvKMIsGdahyBLpZ3Q 提取码:6666。投影视角:(View Angle),默认的视角大小为30º,GetViewAngle()或者是SetViewAngle()SetSwitch() / SwitchOn()/ SwitchOff()— 打开或关闭对应的光照。相机位置:vtkCamera::SetPosition()或者GetPosition()SetColor() — 设置光照的颜色(一般是设置rgb)

Littlehero_121的博客 1676

Allegro如何导入芯片的Pin Delay?

Allegro在做等长时,需要导入芯片的Pin Delay才能做真正的等长。因为有些芯片内部的引脚本身就是不等长的,例如海思的部分芯片。在右栏找到芯片U1,然后在Pin Delay栏下找一个PIN脚随便输入一个数值,这一步的目的是导出Pin Delay.csv文件的格式。4、用这份文件的格式,重新编辑需要导入芯片的Pin Delay,然后选择菜单File→Import→Pin delay。2、回到PCB,选择菜单File→Export→Pin delay,导出Pin Delay。

bhxc809751502的博客 5144

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

4.vtk光照vtkLight

vtkActor: 每个vtkActor对象(代表场景中的一个对象)都有自己的属性,包括材质属性(material properties),这些属性决定了该对象如何响应光。在 VTK 中,类似的命名风格不仅适用于 vtkLight,还适用于其他类,例如 vtkProp(所有可视化对象的基类)。关键点: 光源的方向由其位置 (SetPosition) 和焦点 (SetFocalPoint)以下是 vtkLight 提供的一些常用方法及其作用: (1) 设置光照颜色。(2) 设置光源位置。

weixin_45672157的博客 510

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VTK的基本概念

本文主要详细介绍VTK中三维场景的基本要素。

TechNomad的博客 1501

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vtk相机_vtk光照、颜色、相机、坐标系统及空间变换

一、vtkLight常的方法有:学习SetColor() — 设置光照的颜色,以RGB的形式指定颜色。spaSetPosition() — 设置光照位置。.netSetFocalPoint() — 设置光照焦点。3dSetIntensity() — 设置光照的强度。codeSetSwitch() /SwitchOn()/SwitchOff()— 打开或关闭对应的光照。orm在基础概念代码中加入...

weixin_33329746的博客 728

VTK 学习笔记

VTK 是什么 VTK,Visualization Tool Kit,可视化工具包。 VTK 是一个用于图像处理、三维图形、体绘制(通过模拟光线穿越半透明物体时的能量变化来绘制物体,即采用体光照模型对三维体数据场进行直接显示)、可视化的开源软件系统。 VTK 架构 VTK 库的框架结构 vtkObject -> vtkSource -> vtkFilter -> vtkMapper -> vtkActor -> vtkRenderer vtkObject vtkObject 是

TEDxPY 3391

VTK修炼之道70:体绘制讨论_光照&阴影、VTKLODProp3D

1.光照与阴影 通过VTKVolumeProperty可以设置体绘制阴影效果(Shading)。阴影效果主要受环境光系数、散射光系数、反射光系数和高光强度四个参数影响。 vtkVolumeProperty::SetAmbient()设置环境光系数vtkVolumeProperty::SetDiffuse()设置散射光系数vtkVolumeProperty::SetSpecula

沈春旭的博客 6768

VTK 学习----3D基础知识-光照

2.3 光照 2.3.1 环境光 环境光通常不是来自单个光源,而是来自散落在我们周围的许多光源,即使它们不是立即可见的。光的一个特性是它可以在许多方向上散射和反射,到达不在其附近的斑点;因此,光可以在其他表面上反射并且对物体的照明具有间接影响。 2.3.2 漫反射光 环境照明本身并不会产生最有趣的结果,但漫射照明将开始对物体产生显着的视觉影响。漫射照明使得物体越靠近其光线与光源对准的光线...

charce_you的专栏 1509
上一篇: VTK基本概念之坐标系统
下一篇: ITK的编译安装(VS2013)
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值