注釈
Go to the end をクリックすると完全なサンプルコードをダウンロードできます.
Lightアクター#
PyVistaのポジションライトにはカスタマイズ可能なビームシェイプがあります. ビーム形状 の例を参照してください.スポットライトは,限の位置を持つ単一指向性ライトであるという点で特殊であり,円錐を使用して可視化できます.
これはまさに vtk.vtkLightActor
の目的であり,スポットライトに対してその機能を有効にすることができます:
import numpy as np
import pyvista as pv
from pyvista import examples
cow = examples.download_cow()
cow.rotate_x(90, inplace=True)
plotter = pv.Plotter(lighting='none', window_size=(1000, 1000))
plotter.add_mesh(cow, color='white')
floor = pv.Plane(center=(*cow.center[:2], cow.bounds[-2]), i_size=30, j_size=25)
plotter.add_mesh(floor, color='green')
UFO = pv.Light(position=(0, 0, 10), focal_point=(0, 0, 0), color='white')
UFO.positional = True
UFO.cone_angle = 40
UFO.exponent = 10
UFO.intensity = 3
UFO.show_actor()
plotter.add_light(UFO)
# enable shadows to better demonstrate lighting
plotter.enable_shadows()
plotter.camera_position = [(28, 30, 22), (0.77, 0, -0.44), (0, 0, 1)]
plotter.show()
ライトアクターは,ポットライトが照明に関係する複雑なシーンを設計する場合に非常に便利です.
plotter = pv.Plotter(lighting='none')
plane = pv.Plane(i_size=4, j_size=4)
plotter.add_mesh(plane, color='white')
rot120 = np.array([[-0.5, -np.sqrt(3) / 2, 0], [np.sqrt(3) / 2, -0.5, 0], [0, 0, 1]])
position = (-1.5, -1.5, 3)
focus = (-0.5, -0.5, 0)
colors = ['red', 'lime', 'blue']
for color in colors:
position = rot120 @ position
focus = rot120 @ focus
light = pv.Light(position=position, focal_point=focus, color=color)
light.positional = True
light.cone_angle = 15
light.show_actor()
plotter.add_light(light)
plotter.show()
1つ注意すべき点は,ライトアクターは円錐の高さが固定されるように表現されることです.これは,円錐角度が非常に大きい場合,通常は膨大なライトアクターになることを意味します.この場合,レンダリング前に手動でカメラ位置を設定することをお勧めします.最初の例の円錐角度を大きくし,手動でのカメラの配置を省略すると,問題が発生します.
plotter = pv.Plotter(lighting='none')
plotter.add_mesh(cow, color='white')
floor = pv.Plane(center=(*cow.center[:2], cow.bounds[-2]), i_size=30, j_size=25)
plotter.add_mesh(floor, color='green')
UFO = pv.Light(position=(0, 0, 10), focal_point=(0, 0, 0), color='white')
UFO.positional = True
UFO.cone_angle = 89
UFO.exponent = 10
UFO.intensity = 3
UFO.show_actor()
plotter.add_light(UFO)
plotter.show()
Total running time of the script: (0 minutes 1.664 seconds)