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()
	
PyOSG Second Appendix Python PyOSG Fourth