Yep. Ported some of the samples to PureBasic. Could be included in SDK?
Blitz3d pbi include + start.pb must be at root of sample dir and samples in their own subdirectory :)
start.pb
tron.pb
dragon.pb
texrender.pb
teapot.pb
multicam.pb
Blitz3d pbi include + start.pb must be at root of sample dir and samples in their own subdirectory :)
start.pb
IncludeFile "../blitz3dsdk.pbi" Declare SetGfx() SetGfx() Procedure SetGfx() ; Initialise Blitz3D engine... bbBeginBlitz3D () ; Set debug mode (it's on by default -- just added this so you can turn it off)... bbSetBlitz3DDebugMode(0) ; 1 = DEBUG ON, 0 = DEBUG OFF If info1$<>"" bbSetBlitz3DTitle( info1$, "Exit "+info1$+"?") EndIf bbFlushKeys() mode_cnt=bbCountGfxModes3D() If Not mode_cnt bbRuntimeError("Can't find any 3D graphics modes") EndIf mode=0 If Not bbWindowed3D() mode=1 EndIf bbGraphics(640,480,16,2) bbSetBuffer(bbBackBuffer()) image=bbLoadImage( "b3dlogo.jpg" ) If Not image image=bbLoadImage( "../b3dlogo.jpg" ) EndIf bbMidHandle(image) font=bbLoadFont( "verdana",16,0,0,0 ) bbSetFont(font) tx=640+160 nx=-160 ty=280 url$="www.blitzbasic.com" url_x=640-bbStringWidth( url$ ) url_y=480-bbFontHeight() Repeat bbCls() bbDrawBlock(image,320,144,0) bbColor(0,255,0) bbText(tx,ty+bbFontHeight()*0,info1$,#True) If (info2$ <> "") bbText(nx,ty+bbFontHeight()*1,info2$,#True) EndIf If (info3$ <> "") bbText(tx,ty+bbFontHeight()*2,info3$,#True) EndIf If (info4$ <> "") bbText(nx,ty+bbFontHeight()*3,info4$,#True) EndIf bbColor(255,255,255) If mode=0 bbText(tx,ty+bbFontHeight()*5,"Windowed",#True) Else bbText(tx,ty+bbFontHeight()*5,Str(bbGfxModeWidth( mode ))+","+Str(bbGfxModeHeight( mode ))+","+Str(bbGfxModeDepth( mode )),#True) EndIf bbColor(255,0,0) bbText(nx,ty+bbFontHeight()*7,"[Return] to begin",#True) bbText(tx,ty+bbFontHeight()*8,"[Arrows] change mode",#True) bbText(nx,ty+bbFontHeight()*9,"[Escape] to exit",#True) bbColor(0,0,255) bbText(url_x,url_y,url$) If bbKeyHit( 1 ) End EndIf If bbKeyHit( 28 ) bbCls():bbFlip() bbCls():bbFlip() bbFreeFont(font) bbFreeImage(image) bbEndGraphics() If mode bbGraphics3D(bbGfxModeWidth(mode),bbGfxModeHeight(mode),bbGfxModeDepth(mode),1) Else bbGraphics3D(640,480,0,2) EndIf bbSetBuffer(bbBackBuffer()) ProcedureReturn EndIf If bbKeyHit( 203 ) mode=mode-1 If mode<0 Or (mode=0 And (Not bbWindowed3D())) mode=mode_cnt EndIf ElseIf bbKeyHit( 205 ) mode=mode+1 If mode>mode_cnt mode=0 If Not bbWindowed3D() mode=1 EndIf EndIf EndIf If tx>320 tx=tx-8 EndIf If nx<320 nx=nx+8 EndIf bbFlip() ForEver EndProcedure
tron.pb
smooth=#True Global info1$="Tron demo" Global info2$="Features dynamic mesh creation" Global info3$="Use arrow keys to steer, A/Z to zoom" IncludeFile "../start.pb" grid_tex=bbCreateTexture( 32,32,8 ) bbScaleTexture(grid_tex,10,10) bbSetBuffer(bbTextureBuffer( grid_tex )) bbColor(0,0,64):bbRect(0,0,32,32) bbColor(0,0,255):bbRect(0,0,32,32,#False) bbSetBuffer(bbBackBuffer()) grid_plane=bbCreatePlane() bbEntityTexture(grid_plane,grid_tex) bbEntityBlend(grid_plane,1) bbEntityAlpha(grid_plane,0.6) bbEntityFX(grid_plane,1) mirror=bbCreateMirror() pivot=bbCreatePivot() p=bbCreatePivot( p ) cube=bbCreateCube( p ) bbScaleEntity(cube,1,1,5) bbSetAnimKey(cube,0) bbRotateEntity(cube,0,120,0) bbSetAnimKey(cube,60) bbRotateEntity(cube,0,240,0) bbSetAnimKey(cube,120) bbRotateEntity(cube,0,0,0) bbSetAnimKey(cube,180) bbAddAnimSeq(p,180) For x=-100 To 100 Step 25 For z=-100 To 100 Step 25 e=bbCopyEntity( p,pivot ) bbPositionEntity(e,x,5,z) bbAnimate(e) Next Next bbFreeEntity(cube) trail_mesh=bbCreateMesh() trail_brush=bbCreateBrush() bbBrushColor(trail_brush,255,0,0) bbBrushBlend(trail_brush,3) bbBrushFX(trail_brush,1) trail_surf=bbCreateSurface( trail_mesh,trail_brush ) bbAddVertex(trail_surf,0,2,0,0,0) bbAddVertex(trail_surf,0,0,0,0,1) bbAddVertex(trail_surf,0,2,0,0,0) bbAddVertex(trail_surf,0,0,0,0,1) bbAddTriangle(trail_surf,0,2,3) bbAddTriangle(trail_surf,0,3,1) bbAddTriangle(trail_surf,0,3,2) bbAddTriangle(trail_surf,0,1,3) trail_vert=2 bike=bbCreateSphere() bbScaleMesh(bike,0.75,1,2) bbPositionEntity(bike,0,1,0) bbEntityShininess(bike,1) bbEntityColor(bike,192,0,255) camera=bbCreateCamera() bbTurnEntity(camera,45,0,0) cam_d.f=30 light=bbCreateLight() bbTurnEntity(light,45,45,0) add_flag=#False While Not bbKeyHit(1) If bbKeyHit(17) wire=~wire bbWireFrame(wire) EndIf If bbKeyDown(30) cam_d=cam_d-1 EndIf If bbKeyDown(44) cam_d=cam_d+1 EndIf turn=0 If smooth If bbKeyDown(203) turn=5 EndIf If bbKeyDown(205) turn=-5 EndIf If turn add_cnt=add_cnt+1 If add_cnt=3 add_cnt=0 add_flag=#True Else add_flag=#False EndIf ElseIf add_cnt add_cnt=0 add_flag=#True Else add_flag=#False EndIf Else If bbKeyHit(203) turn=90 EndIf If bbKeyHit(205) turn=-90 EndIf If turn add_flag=#True Else add_flag=#False EndIf EndIf If turn bbTurnEntity(bike,0,turn,0) EndIf bbMoveEntity(bike,0,0,1) If add_flag bbAddVertex(trail_surf,bbEntityX(bike),2,bbEntityZ(bike),0,0) bbAddVertex(trail_surf,bbEntityX(bike),0,bbEntityZ(bike),0,1) bbAddTriangle(trail_surf,trail_vert,trail_vert+2,trail_vert+3) bbAddTriangle(trail_surf,trail_vert,trail_vert+3,trail_vert+1) bbAddTriangle(trail_surf,trail_vert,trail_vert+3,trail_vert+2) bbAddTriangle(trail_surf,trail_vert,trail_vert+1,trail_vert+3) trail_vert=trail_vert+2 Else bbVertexCoords(trail_surf,trail_vert,bbEntityX(bike),2,bbEntityZ(bike)) bbVertexCoords(trail_surf,trail_vert+1,bbEntityX(bike),0,bbEntityZ(bike)) EndIf bbUpdateWorld() bbPositionEntity(camera,bbEntityX(bike)-5,0,bbEntityZ(bike)) bbMoveEntity(camera,0,0,-cam_d) ; PositionEntity camera,0,20,0 ; PointEntity camera,bike bbRenderWorld() bbFlip() Wend End
dragon.pb
;0,40 : idle ;40,46 : run ;46,54 : attack ;54,58 : paina ;58,62 : painb ;62,66 : painc ;66,72 : jump ;72,84 : flip Global info1$="Dragon Demo" Global info2$="Use arrows keys to pan, A/Z to zoom" Global info3$="MD2 Dragon model courtesy of Polycount" ; Run start code IncludeFile "../start.pb" ;environment cube cube=bbCreateCube() bbFitMesh(cube,-250,0,-250,500,500,500) bbFlipMesh(cube) tex=bbLoadTexture( "chorme-2.bmp" ) bbScaleTexture(tex,1.0/3,1.0/3) bbEntityTexture(cube,tex) bbEntityAlpha(cube,0.4) bbEntityFX(cube,1) ;floor mirror m=bbCreateMirror() ;simple light light=bbCreateLight() bbTurnEntity(light,45,45,0) ;camera camera=bbCreateCamera() cam_xr.f=30:cam_yr.f=0:cam_zr.f=0:cam_z.f=-100 ;cool dragon model! tex=bbLoadTexture( "model\dragon.bmp" ) dragon=bbLoadMD2( "model\dragon.md2" ) bbEntityTexture(dragon,tex) bbPositionEntity(dragon,0,25,0) bbTurnEntity(dragon,0,150,0) bbAnimateMD2(dragon,1,0.05,0,40) While Not bbKeyHit(1) If bbKeyDown(203) cam_yr=cam_yr-2 ElseIf bbKeyDown(205) cam_yr=cam_yr+2 EndIf If bbKeyDown(200) cam_xr=cam_xr+2 If cam_xr>90 cam_xr=90 EndIf ElseIf bbKeyDown(208) cam_xr=cam_xr-2 If cam_xr<5 cam_xr=5 EndIf EndIf If bbKeyDown(26) cam_zr=cam_zr+2 ElseIf bbKeyDown(27) cam_zr=cam_zr-2 EndIf If bbKeyDown(30) cam_z=cam_z+1:If cam_z>-10 cam_z=-10 EndIf ElseIf bbKeyDown(44) cam_z=cam_z-1:If cam_z<-180 cam_z=-180 EndIf EndIf bbPositionEntity(camera,0,0,0) bbRotateEntity(camera,cam_xr,cam_yr,cam_zr) bbMoveEntity(camera,0,0,cam_z) bbUpdateWorld() bbRenderWorld() bbFlip() Wend ; Close down Blitz3D engine... bbEndBlitz3D () End
texrender.pb
Global info1$="Texture render demo" Global info2$="Renders a 3D scene onto a texture" Global info3$="Use Arrow keys to Pan, A/Z to zoom" ; Run start code IncludeFile "../start.pb" grid_tex=bbCreateTexture( 16,16,8,1 ) bbScaleTexture(grid_tex,10,10) bbSetBuffer(bbTextureBuffer( grid_tex )) bbClsColor(255,255,255):bbCls():bbClsColor(0,0,0) bbColor(192,192,192):bbRect(0,0,8,8):bbRect(8,8,8,8) bbSetBuffer(bbBackBuffer()) plane=bbCreatePlane() bbEntityTexture(plane,grid_tex) pivot=bbCreatePivot() bbPositionEntity(pivot,0,2,0) t_sphere=bbCreateSphere( 8 ) bbEntityShininess(t_sphere,0.2) For t=0 To 359 Step 36 sphere=bbCopyEntity( t_sphere,pivot ) bbEntityColor(sphere,Random(256),Random(256),Random(256)) bbTurnEntity(sphere,0,t,0) bbMoveEntity(sphere,0,0,10) Next bbFreeEntity(t_sphere) texture=bbCreateTexture( 128,128,256 ) cube=bbCreateCube() bbEntityTexture(cube,texture) bbPositionEntity(cube,0,7,0) bbScaleEntity(cube,3,3,3) light=bbCreateLight() bbTurnEntity(light,45,45,0) camera=bbCreateCamera() plan_cam=bbCreateCamera() bbTurnEntity(plan_cam,90,0,0) bbPositionEntity(plan_cam,0,20,0) bbCameraViewport(plan_cam,0,0,128,128) bbCameraClsColor(plan_cam,0,128,0) d.f=-20 While Not bbKeyHit(1) If bbKeyDown(30) d=d+1 EndIf If bbKeyDown(44) d=d-1 EndIf If bbKeyDown(203) bbTurnEntity(camera,0,-3,0) EndIf If bbKeyDown(205) bbTurnEntity(camera,0,3,0) EndIf bbPositionEntity(camera,0,7,0) bbMoveEntity(camera,0,0,d) bbTurnEntity(cube,0.1,0.2,0.3) bbTurnEntity(pivot,0,1,0) bbUpdateWorld() bbHideEntity(camera) bbShowEntity(plan_cam) bbRenderWorld() bbCopyRect(0,0,128,128,0,0,0,bbTextureBuffer( texture )) bbShowEntity(camera) bbHideEntity(plan_cam) bbRenderWorld() bbFlip() Wend
teapot.pb
Global info1$="Teapot demo" Global info2$="Features Cubic/spheriocal reflection mapping" Global info3$="Arrows keys to pan camera" IncludeFile "../start.pb" cube_ref=#False If bbGfxDriverCaps3D()>=110 Global out$ = PeekS(bbInput("")); First call fails? Is this a bug? bbLocate(0,0) ; Oh well, place it on top of failed one :) If Left(LCase(PeekS(bbInput("Select (c)ubic or (s)pherical mapping :"))),1)="c" cube_ref=#True EndIf EndIf teapot=bbLoadMesh( "teapot.x" ) If cube_ref tex=bbLoadTexture( "castle_env.bmp",128+8 ) Else tex=bbLoadTexture( "spheremap.bmp",64+1 ) EndIf bbEntityTexture(teapot,tex,0,0) bbEntityFX(teapot,1) cam_pivot=bbCreatePivot(); teapot ) camera=bbCreateCamera( cam_pivot ) bbPositionEntity(camera,0,0,-3) While Not bbKeyHit(1) If bbKeyDown(200) bbTurnEntity(cam_pivot,3,0,0) EndIf If bbKeyDown(208) bbTurnEntity(cam_pivot,-3,0,0) EndIf If bbKeyDown(203) bbTurnEntity(cam_pivot,0,3,0) EndIf If bbKeyDown(205) bbTurnEntity(cam_pivot,0,-3,0) EndIf bbTurnEntity(teapot,0.1,0.3,0) bbUpdateWorld() bbRenderWorld() bbFlip() Wend End
multicam.pb
; Just dummies here Global info1$ = "Multicam" Global info2$ = "Demonstrates the use of multiple cameras" Global info3$ = "Use arrows keys to pan, A/Z to zoom" ; Run start code IncludeFile "../start.pb" tex=bbCreateTexture( 64,64 ) bbSetBuffer(bbTextureBuffer( tex )) bbColor(255,0,0):bbRect(0,0,32,32):bbRect(32,32,32,32) bbColor(255,128,0):bbRect(32,0,32,32):bbRect(0,32,32,32) bbSetBuffer(bbBackBuffer()) bbColor(255,255,255) cone=bbCreateCone(20) bbEntityTexture(cone,tex) sphere=bbCreateSphere(10) bbPositionEntity(sphere,2,0,0) bbEntityTexture(sphere,tex) cylinder=bbCreateCylinder(20) bbPositionEntity(cylinder,-2,0,0) bbEntityTexture(cylinder,tex) light=bbCreateLight() bbTurnEntity(light,45,45,0) pivot=bbCreatePivot() z_cam=bbCreateCamera( pivot ) bbCameraViewport(z_cam,0,0,320,240) bbPositionEntity(z_cam,0,0,-5) y_cam=bbCreateCamera( pivot ) bbCameraViewport(y_cam,320,0,320,240) bbPositionEntity(y_cam,0,5,0) bbTurnEntity(y_cam,90,0,0) x_cam=bbCreateCamera( pivot ) bbCameraViewport(x_cam,0,240,320,240) bbTurnEntity(x_cam,0,-90,0) bbPositionEntity(x_cam,-5,0,0) While Not bbKeyHit(1) If bbKeyDown(203) bbMoveEntity(pivot,-0.1,0,0) EndIf If bbKeyDown(205) bbMoveEntity(pivot,0.1,0,0) EndIf If bbKeyDown(200) bbMoveEntity(pivot,0,0.1,0) EndIf If bbKeyDown(208) bbMoveEntity(pivot,0,-0.1,0) EndIf If bbKeyDown(30) bbMoveEntity(pivot,0,0,0.1) EndIf If bbKeyDown(44) bbMoveEntity(pivot,0,0,-0.1) EndIf bbUpdateWorld() bbRenderWorld() bbText(0,0,"Front") bbText(320,0,"Top") bbText(0,240,"Left") bbFlip() Wend End