Aurora 3D Engine Availiable now

BlitzMax Forums/BlitzMax Programming/Aurora 3D Engine Availiable now

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

To show how easy the engine is to use, here's a barebones wasd fps viewer.

Strict
Import Dsi.Aurora

Local Display:TDisplay = TDisplay.Create()
Display.OpenScreen()


Display.ShadowMode( Shadows_StencilAdd )
Local Sl:TSceneLoader = New TSceneLoader

Sl.LoadBest("scene.OSM")


Const FPS#=30
Local period#=1000/FPS
Local time#=MilliSecs()-period

Display.ShadowMode( Shadows_StencilMod )


'---- Scene Set up
Local Camera:TCamera = TCamera.Create()
TGui.Init( Camera )

Local InputDevice:TInput = TInput.Create()
Local elapsed#

Local ticks#,tween#
Repeat
	Repeat
		elapsed=MilliSecs()-time
	Until elapsed
	ticks=elapsed/period
	
	';fractional remainder
	tween#=Float(elapsed Mod period)/Float(period)
	
	For Local k=1 To ticks
		time=time+period


	camera.pitch( -inputdevice.mouseyspeed() )
	camera.yaw( -inputdevice.mousexspeed() )
	If inputdevice.keydown(KEY_W)
		camera.move(0,0,-1)
	End If
	If inputdevice.keydown(KEY_S)
		camera.move(0,0,1)
	End If
	If inputdevice.keydown(KEY_A)
		camera.move(-1,0,0)
	End If
	If inputdevice.keydown(KEY_D)
		camera.move(1,0,0)
	End If
		captureInput()
		tgui.freeevents()
		tgui.updateEvents()
	Next
	Render3D()
		
Until InputDevice.KeyDown(Key_Escape)



Here's a slightly more complicated demo showcasing physics and fps movement, linepicks and camerapicks.

Local Display:TDisplay = TDisplay.Create()
Display.OpenScreen()

Local Light:TLight = Tlight.CreateOmni()
Light.Diffuse( 255,255,255 )
Light.Position( 0,30,0 )
Light.Specular( 0,0,0 )
TLight.SetAmbient( 128,128,128 )
Display.ShadowMode( Shadows_StencilAdd )


'---- Scene Set up
Local Camera:TCamera = TCamera.Create()
TGui.Init( Camera )

Local InputDevice:TInput = TInput.Create()
TPhysics.Init( Camera )
TPhysics.SetWorldSize( -1000,-1000,-1000,1000,1000,1000 )
Local Terrain:TEntity = TEntity.CreateMesh("terrain.mesh")


Local md:TMeshData =Terrain.CreateMeshData( "terrain.mesh" )
Print md.vertices()


Local Col:TCollider = TCollider.CreateStatic( Terrain )
Local GBody:TBody = tbody.Create( col,"Ground" )
gbody.attachtopivot( terrain )
gbody.setInertia( Tinertia.CreateCube( 0,1,1,1 ) )
Local Sky:TEntity = TEntity.CreateMesh("sky.mesh")

'--- Gun set up

Local Gun:TEntity = TEntity.CreateMesh("gun1.mesh")
Gun.scale( 0.05,0.05,0.05 )

'--- Set up barrels


gun.setmaterial( "Examples/BumpMapping/MultiLightSpecular" )

'---Target set up

Type Target
	Function Create:Target( x#,z#,xs#,ys#,zs#)
		
		Local out:target = New target
		out.ent = TEntity.CreateMesh( "target1.mesh" )
		out.ent.castshadows( True )
		out.ent.scale( xs,ys,zs )
		Local col:TCollider = TCollider.Createconvex( out.ent )
		out.bod = Tbody.Create( col,"Target" )
		out.bod.attachtopivot( out.ent )
		out.bod.setinertia( Tinertia.createCube( 0.5,2.5,6,1 ) )
		out.bod.setCenterOfMass( 0,0.2,0 )
		out.bod.enableGravity()
		out.bod.ActivateForceAndTorque()
		Local groundy#
		If traycast.cast( x,200,z,0,-400,0 )
			groundy = traycast.y()+1
		Else
			groundy=100
		EndIf
		out.bod.position(x,groundy,z)
		Return out	
	End Function
	Field bod:TBody
	Field Ent:TEntity
End Type

Local targets = 20
Local tars:Tlist = CreateList()
For Local j=1 To targets
	
	Local tar:Target = target.create(Rnd(-100,100),Rnd(-100,100),0.2,0.2,0.2 )
	tars.addlast( tar )
	
		
Next

Local GunFire:TSound = LoadSound("Media/Shot1.wav")
Local FireTime:TTimer = TTimer.Create(100)

'--- Player Vars. Normally would be a type but this is supposed to be an easy to understand demo so not here it ain't. 
Local playx#,playy#,playz#
Local xi#,zi#
Local cinc#
Repeat


	'update physics.
	For Local j=1 To 3
		tphysics.update( 0.1 )
	Next
	
	
	If inputdevice.mousedown( 0 ) 
		If firetime.clicked()
		
	
		If camera.pick( displaywidth()/2,displayheight()/2 )
			
			Local hx#,hy#,hz#
			hx = camera.pickx()
			hy = camera.picky()
			hz = camera.pickz()
			Local bod:Tbody = camera.pickBody()
			
			Local vx#,vy#,vz#,mag#
			vx = bod.x()-camera.x()
			vy = bod.y()-camera.y()
			vz = bod.z()-camera.z()
			mag = Sqr( vx*vx+vy*vy+vz*vz )
			vx = vx/mag
			vy = vy/mag
			vz = vz/mag
			Local strength# = 100
			bod.addpush( vx*Strength,vy*Strength,vz*strength )
			'bod.push( hx,hy,hz,vx*strength,vy*strength,vz*strength )
			TParticleController.Create( hx,hy,hz,"Examples/Smoke",250,1000 )
			
		EndIf
		PlaySound gunfire
		EndIf
			
	Else
		firetime.reset()
	EndIf
	TparticleController.UpdateAll()
	
	'Check to see where the player should be on the terrain.
	If traycast.cast( playx,10,playz,0,-100,0 ) 'cast a ray
		
		playx = traycast.x()
		playy = traycast.y()+4
		playz = traycast.z()
		
	EndIf
	'position and rotate camera based on player input
	camera.position( playx,playy,playz )
	camera.pitch( -inputdevice.mouseyspeed() )
	camera.yaw( -inputdevice.mousexspeed() )
	
	If inputdevice.keydown( Key_W )
		Camera.TFormVector( 0,0,-0.2 )
		xi:+Camera.TFormedX()
		zi:+Camera.TFormedZ()
	EndIf
	If inputdevice.keydown( KEY_A )
		camera.tformvector( -0.05,0,0 )
		xi:+camera.tformedx()
		zi:+camera.tformedz()
	End If
	If inputdevice.keydown( KEY_D )
		camera.tformvector( 0.05,0,0 )
		xi:+Camera.tformedx()
		zi:+camera.tformedz()
	End If
	If inputdevice.keydown( KEY_S )
		camera.tformvector( 0,0,0.2 )
		xi:+camera.tformedx()
		zi:+camera.tformedz()
	End If
	
	xi:*0.9
	zi:*0.9
	playx:+xi
	playz:+zi
	
	'determine gun's position
	camera.tformpoint( -1,-1,-3 )
	
	gun.position( camera.tformedx(),camera.tformedy(),camera.tformedz() )
	
	'Determine gun's orientation
	
	gun.setquat( camera.getQuat() )
	
	
	Render3D()
	CaptureInput()
	tgui.freeevents()
	tgui.updateevents()
	
Until InputDevice.KeyDown(Key_Escape)