Home >> Python >> Panda3D Subview


■サブビュー

☆左右に分割

from direct.showbase.ShowBase import ShowBase
from direct.showbase.Loader import Loader
from panda3d.core import *

# Loading Model
base = ShowBase( )
loader = Loader( base )
model = loader.loadModel( "cube.dae" )
model.reparentTo( render )
model.setPos( 0, 5, 0 )  #y: depth # z: upper

# Lighting
dlight = DirectionalLight( 'dlight' )
dlight.setColor( VBase4( 0.8, 0.8, 1.0, 1 ) )
dlight.setDirection( Vec3( -1, 1, -1 ) )
dlnp = render.attachNewNode( dlight )
render.setLight(dlnp)

# Subcamera
displayRegion = base.win.makeDisplayRegion(0.2, 1, 0, 1)
displayRegion.setClearColor(VBase4(0, 0, 0, 1))
displayRegion.setClearColorActive(True)

cam2 = Camera( 'camera2' )
lens = PerspectiveLens( )
lens.setViewVector( 0, 5, 0, 0, 0, 1 )
cam2.setLens( lens )
camNP = NodePath(cam2)
camNP.setPos( 0, -16, 0 )
displayRegion.setCamera(camNP)
camNP.reparentTo(render)
#camNP.reparentTo(base.cam)とすると、メインのカメラの動きに連動する

# split dimension
dr = base.cam.node().getDisplayRegion(0)
dr2 = camNP.node().getDisplayRegion(0)

dr.setDimensions(0, 0.5, 0, 0.5)
dr2.setDimensions(0.5, 1, 0, 1)

base.run( )
	

☆重なる場合

from direct.showbase.ShowBase import ShowBase
from direct.showbase.Loader import Loader
from panda3d.core import *

# Loading Model
base = ShowBase( )
loader = Loader( base )
model = loader.loadModel( "cube.dae" )
model.reparentTo( render )
model.setPos( 0, 10, 0 )  #y: depth # z: upper

# Lighting
dlight = DirectionalLight( 'dlight' )
dlight.setColor( VBase4( 1, 1, 0, 1 ) )
dlight.setDirection( Vec3( -1, 1, -1 ) )
dlnp = render.attachNewNode( dlight )
render.setLight(dlnp)

# Display Region
dr = base.win.makeDisplayRegion()
dr.setSort(20)
dr.setClearColor(VBase4(0, 0, 0, 1))
dr.setClearColorActive(True)
dr.setClearStencil( DrawableRegion.RTPStencil )
dr.setClearStencilActive(True)
dr.setDimensions(0.5, 1, 0.3, 0.7)

myCamera2d = NodePath(Camera('myCam2d'))
lens = PerspectiveLens( )
lens.setViewVector( 0, 5, 0, 0, 0, 1 )
myCamera2d.node().setLens(lens)
myCamera2d.setPos( 0, -16, 0 )

myRender2d = NodePath('myRender2d')
myCamera2d.reparentTo(render)
#myCamera2d.reparentTo(base.cam)とすると、メインのカメラの動きに連動する
dr.setCamera(myCamera2d)

base.run( )

☆作成したディスプレイ領域でのマウス入力の取得

myMouseWatcher = MouseWatcher()
base.mouseWatcher.getParent().attachNewNode(myMouseWatcher) 
myMouseWatcher.setDisplayRegion(myDisplayRegion) 
if(myMouseWatcher.hasMouse()):
  mpos = myMouseWatcher.getMouse()

Panda 3d Key/Mouse Input Python Python 3d GUI Components