美文网首页
VTK中的三维场景的变换(相机、光源)

VTK中的三维场景的变换(相机、光源)

作者: 小黄不头秃 | 来源:发表于2024-03-03 14:45 被阅读0次

1 VTK 中的相机(vtkCamera)的作用和原理:

VTK 相机 基于计算机图形学中的透视投影原理来模拟相机的行为。它定义了一个虚拟相机,可以从不同的角度观察三维场景,并将其投影到屏幕上。
透视投影变换 是一种数学技术,将三维场景中的点转换为屏幕上的二维像素坐标。在透视投影中,相机位于三维空间的某个位置,通过视点(ViewPoint)来定义相机的位置。相机还有一个方向向量,表示相机的观察方向。视点和方向向量共同决定了相机的位置和朝向。

相机的参数:

  • Position(相机位置):光心的位置,相当于小孔相机模型中小孔的位置。可以通过 vtkCamera::SetPosition() 和 vtkCamera::GetPosition() 设置和获取。
  • Focal Point(相机焦点):焦点的位置,用三维坐标表示,默认相机焦点的位置在世界坐标系的原点。通过vtkCamera::SetFocusPoint() 和 vtkCamera::GetFocusPoint() 设置和获取。
  • View Up(相机朝向):ViewUp 指图像的正方向。由 Position 和 Focal Point 确定了相机的实际方向,即确定了相机的视图。
  • View Angle(相机视角):视角,默认是 30°。决定了图像的比例大小,通过设置 vtkCamera::SetViewAngle() 可以对图像进行缩放。
  • Front Clipping Plane / Back Clipping Plane(前/后裁剪平面):只有在这两个剪切平面之间的内容才会被渲染和显示,默认值是 (0.1, 1000)。
  • Direction of Projection(投影方向):一个三维矢量,从光心位置指向焦点位置。它决定了相机的视线方向。
  • Azimuth(水平旋转):要将相机水平翻转(绕垂直轴旋转),您可以使用 vtkCamera::Azimuth(180.0) 方法。这将使相机绕其焦点旋转 180 度,从而实现水平翻转。
  • Elevation(垂直旋转):要实现相机的垂直翻转(绕水平轴旋转),您可以使用 vtkCamera::Roll(180.0) 方法。这将使相机绕其视线方向旋转 180 度,从而实现垂直翻转。
  • Zoom():通过改变视角的方法放大缩小对象。
  • ResetCamera(重置相机):自适应

示例代码:

import vtk

def create_camera():
    # 创建一个相机
    camera = vtk.vtkCamera()
    # 设置相机位置
    camera.SetPosition(0, 0, 10)
    # 设置相机焦点
    camera.SetFocalPoint(0, 0, 0)
    # 设置相机朝向
    camera.SetViewUp(0, 1, 0)
    # 设置相机视角
    camera.SetViewAngle(30)
    # 设置前/后裁剪平面
    camera.SetClippingRange(0.1, 1000)
    # 在 X 方向上旋转 34 度
    camera.Azimuth(34.0)
    return camera

if __name__ == "__main__":
    # 创建相机
    my_camera = create_camera()
    
    # 打印相机参数
    print("Camera Position:", my_camera.GetPosition())
    print("Camera Focal Point:", my_camera.GetFocalPoint())
    print("Camera View Up:", my_camera.GetViewUp())
    print("Camera View Angle:", my_camera.GetViewAngle())
    print("Camera Clipping Range:", my_camera.GetClippingRange())

2 光源 Light

VTK 中的光源(vtkLight)
作用和原理:
vtkLight 用于模拟三维渲染中的光照效果。它提供了定位光源和方向光源的功能,可以控制光照的亮度、颜色和衰减等属性。
在 VTK 中,光源分为两类:

  • 位置光源(Positional Light,也称为聚光灯):光源位置在渲染场景中的某个位置。您可以指定光照的衰减值、锥角等。
  • 方向光源(Directional Light,也称为平行光):光源位置在无穷远,光线可以认为是平行的,类似自然界中的太阳光。

光源参数:

  • 位置(Position):光源的位置,可以通过 vtkLight::SetPosition(x, y, z) 设置。
  • 焦点(Focal Point):光线的方向,通过 vtkLight::SetFocalPoint(x, y, z) 设置。
  • 环境光颜色(Ambient Color):光源的环境光颜色,通过 vtkLight::SetAmbientColor(r, g, b) 设置。
  • 漫反射颜色(Diffuse Color):光源的漫反射颜色,通过 vtkLight::SetDiffuseColor(r, g, b) 设置。
  • 镜面反射颜色(Specular Color):光源的镜面反射颜色,通过 vtkLight::SetSpecularColor(r, g, b) 设置。

示例代码:

import vtk

def create_light():
    # 创建一个光源
    light = vtk.vtkLight()
    # 设置光源位置
    light.SetPosition(0, 0, 10)
    # 设置光源焦点
    light.SetFocalPoint(0, 0, 0)
    # 设置光源的颜色
    light.SetColor(1, 0, 0)
    # 设置光源环境光颜色
    light.SetAmbientColor(0.2, 0.2, 0.2)
    # 设置光源漫反射颜色
    light.SetDiffuseColor(1.0, 1.0, 1.0)
    # 设置光源镜面反射颜色
    light.SetSpecularColor(1.0, 1.0, 1.0)
    
    return light

if __name__ == "__main__":
    # 创建光源
    my_light = create_light()
    
    # 打印光源参数
    print("Light Position:", my_light.GetPosition())
    print("Light Focal Point:", my_light.GetFocalPoint())
    print("Light Ambient Color:", my_light.GetAmbientColor())
    print("Light Diffuse Color:", my_light.GetDiffuseColor())
    print("Light Specular Color:", my_light.GetSpecularColor())

相关文章

  • THREE.JS 2.0 场景及场景中的对象

    THREE.Scene() 场景中的三要素camera 相机spotLight 光源object (plane、c...

  • Threejs基本概念(一)

    一、场景Scene 构建一个三维空间,在这个空间里去添加具体的物体、光源等等。 二、相机 Camera 这个三位空...

  • [WebAR和WebVR学习之路]组成Three.js场景的基本

    组成Three.js场景的基本组件 《创建场景》 场景中的基本组件:相机、光源和几何体 THREE.Scene()...

  • Three.js Sprite 精灵 shader 原理

    说起精灵,特指的是三维世界里始终面向镜头的平面物体,不随着相机变换而变换,就好像是浮在三维的上方,比较常见。 Th...

  • OpenCV-15投影与三维视觉

    1 前言 本章我们将会探讨三维视觉,首先会研究三维到二维的投影变换以及其逆变换,然后会介绍多相机立体景深感知。在这...

  • 三维场景的坐标变换

    计算机图形学第七章三维观察1.建模坐标MC经过建模变换:将模型放置在场景中,模型的坐标变换为场景内的坐标2.世界坐...

  • three.js

    threejs官网 三维场景基本要素: 场景(Scene):模型、灯光等 相机(Camera):观察场景的视角 渲...

  • 渲染流水

    1.应用阶段 CPU负责(绝对控制权)1.准备场景数据(相机位置、视锥体、场景中的模型、光源等)2.不可见剔除(粗...

  • Three.js笔记(五)变换坐标

    简述 现在探索Three.js功能。 在为场景制作动画之前,我们需要知道如何变换场景中的对象。 我们已经使用相机完...

  • 相机-白平衡

    相机-白平衡 白平衡是在任何拍摄场景的光源下,都能将白色的物体还原为白色。 相机的白平衡控制,就是相机在不同的光线...

网友评论

      本文标题:VTK中的三维场景的变换(相机、光源)

      本文链接:https://www.haomeiwen.com/subject/pnvzadtx.html