Code archives/Miscellaneous/wxMax + minib3d

This code has been declared by its author to be Public Domain code.

Download source code

wxMax + minib3d by Warner2009
Not sure if this is the best way to do this, but this is how I got this to work.
SuperStrict

Framework wx.wxApp
Import wx.wxFrame
Import wx.wxPanel
Import wx.wxGLCanvas
Import wx.wxglmax2D

Import wx.wxTimer

Import sidesign.minib3d

'Since i want to call 'refresh' from inside the timer, i need to store
'this handle. That way i can address 'prog.canvas'
Global prog:MyApp = New MyApp
prog.Run()

Type MyApp Extends wxApp

	Field frame:wxFrame
	Field panel:wxPanel
	Field canvas:TMiniB3D

	Method OnInit:Int()

		'create a 640x480 window
		frame = New wxFrame.Create(,,"MiniB3d Sample", 0, 0, 640, 480)
		frame.Center()
		
		'create a 320x240 wxPanel
		panel = New wxPanel.Create(frame, wxID_ANY, 160, 0, 320, 240)
		'create wxGLCanvas with minib3d on it
		canvas = TMiniB3D(New TMiniB3D.Create(panel, wxID_ANY, GRAPHICS_BACKBUFFER|GRAPHICS_DEPTHBUFFER, 0, 0, 320, 240))

		'create timer
		Local timer:wxTimer = MyTimer(New MyTimer.Create())
		timer.Start(25)
								
		frame.show()				

		Return True
	
	End Method
			
End Type

Type TMiniB3D Extends wxGLCanvas

	Field init:Int = 0
				
	Method OnPaint(event:wxPaintEvent)
	
		'this could be done better, i'm sure, but for me it was the only way it works
		'when onpaint is called, the canvas is valid and can be initialized by minib3d
		If init = 0 Then
		
			'init minib3d
			SetGraphics CanvasGraphics2D( Self )
			TGlobal.width = 320
			TGlobal.height = 240
			TGlobal.depth = 32
			TGlobal.mode = 2
			TGlobal.GraphicsInit()
			init = 1

			'function for creating camera's etc.			
			InitMB3D()
			
		End If

		'after that, every time onpaint is called, the scene can be rendered
		RenderMB3D()

	End Method

End Type

Global cam:TCamera
Global cube:TEntity

'setup camera and cube
Function InitMB3D()

	cam  = CreateCamera()
	cube = CreateCube()
	MoveEntity cam, 0, 0, -5
	
	EntityTexture cube, LoadTexture("C:\Program Files\BlitzMax\docs\html\bmax120.png") 'hopefully you have this file too
	EntityFX cube, 1
	
	RenderWorld 'i need to do this in my modded version of minib3d, i don't think it is needed in the orig. version

End Function

'render stuff
Function RenderMB3D()

	RenderWorld
	
	BeginMax2D 'max2d works as well
	DrawText "hello", 0, 0
	EndMax2D
	
	Flip

End Function

'timer
Type MyTimer Extends wxTimer

	Field count:Int

	Method Notify()
		TurnEntity cube, 1, 2, 3 'turn cube
		prog.canvas.Refresh() 'render scene
	End Method

End Type

Comments

None.

Code Archives Forum