Home >>
Python >> PyOSG First
■PyOSGでのモデルの複数配置
★Directed Acyclic Graph
★モデルの配置
import osg, osgDB, osgViewer
import sys, math
root = osg.Group( )
osgDB.setLibraryFilePathList(sys.path)
loadedModel = osgDB.readNodeFile('cessna.osg')
for i in range( 13 ):
node = osg.PositionAttitudeTransform( )
if i % 2 == 0:
if i == 4:
node.setPosition( osg.Vec3d( 0, 0, 9 ) )
elif i == 8:
node.setPosition( osg.Vec3d( 0, 0, -9 ) )
else:
if i == 2 or i == 10:
node.setPosition( osg.Vec3d( (i-6)*3, 14, 0 ) )
else:
node.setPosition( osg.Vec3d( (i-6)*3, 0, 0 ) )
else:
if i // 2 < 2:
node.setPosition( osg.Vec3d( -12, 0, (2-i)*3) )
elif i // 2 < 4:
node.setPosition( osg.Vec3d( 0, 14, (6-i)*3) )
else:
node.setPosition( osg.Vec3d( 12, 0, (10-i)*3) )
node.setScale( osg.Vec3d( 0.3, 0.3, 0.3 ) )
node.addChild( loadedModel )
root.addChild( node )
viewer = osgViewer.Viewer()
viewer.setSceneData( root )
viewer.addEventHandler(osgViewer.StatsHandler())
viewer.addEventHandler(osgViewer.WindowSizeHandler()) #ADD
viewer.run()
import osg, osgDB, osgViewer
import sys, math
root = osg.Group( )
osgDB.setLibraryFilePathList(sys.path)
loadedModel = osgDB.readNodeFile('cessna.osg')
for i in range( 8 ):
node = osg.PositionAttitudeTransform( )
quat = osg.Quat( )
quat.makeRotate( i * math.pi/4, 0, 0, 1 ) # 角度, xyz方向ベクトル
node.setAttitude( quat )
node.setScale( osg.Vec3d( 0.3, 0.3, 0.3 ) )
node.setPosition( osg.Vec3d( 18 * math.cos( math.pi/4 * i ) , math.sin( math.pi/4 * i ) * 18, 0 ) )
node.addChild( loadedModel )
root.addChild( node )
viewer = osgViewer.Viewer()
viewer.setSceneData( root )
viewer.addEventHandler(osgViewer.StatsHandler())
viewer.addEventHandler(osgViewer.WindowSizeHandler())
viewer.run()