Tutorial Step3:
教程描述:
介绍如何在一个Renderwindow中使用多个Renderer。在Step1中有提到,在一个Renderwindow中可以同时显示多个Renderer,简单来说就是一个渲染窗口中可以显示一个或多个不同的场景。可以想象一下3DSlicer、Rhino等等从三视图的角度同时观察同一个模型的情况,大概是这个意思。
step3链接如下:
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderer
)
def main(argv):
colors = vtkNamedColors()
cone = vtkConeSource()
cone.SetHeight(3.0)
cone.SetRadius(1.0)
cone.SetResolution(10)
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(colors.GetColor3d('MistyRose'))
#
# 创建两个renderers并分配actors。一个renderer通过vtkRenderWindow渲染在一个视窗里。在这个例子里,我们添加相同的actor到两个不同renderers,添加不同的actors到不同的renderers里也是可行的。
#
ren1 = vtkRenderer()
ren1.AddActor(coneActor)
ren1.SetBackground(colors.GetColor3d('RoyalBlue'))
# SetViewport设定视窗大小在窗口的相对位置。前两个参数为视窗左上角(x,y)相对位置,后两参数为视窗右下角(x,y)相对位置。
ren1.SetViewport(0.0, 0.0, 0.5, 1.0) #即占据窗口的左半部分
ren2 = vtkRenderer()
ren2.AddActor(coneActor)
ren2.SetBackground(colors.GetColor3d('DodgerBlue'))
ren2.SetViewport(0.5, 0.0, 1.0, 1.0) #即占据窗口的右半部分
#
# 最终我们创建渲染窗口,用于显示在屏幕中。
# 我们使用AddRenderer将我们的renderer放进渲染窗口。我们也设定尺寸为300*300像素。
#
renWin = vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.AddRenderer(ren2)
renWin.SetSize(600, 300)
renWin.SetWindowName('Tutorial_Step3')
#
# 使一个相对于另一个呈90°.
#
ren1.ResetCamera()
ren1.GetActiveCamera().Azimuth(90)
for i in range(0, 360):
renWin.Render()
ren1.GetActiveCamera().Azimuth(1)
ren2.GetActiveCamera().Azimuth(1)
if __name__ == '__main__':
import sys
main(sys.argv)