simple3D ist ein Wrapper für Irrlicht, Newton und irrKlang für die Sprachen BlitzPlus, Blitz3D und BlitzMax. Mein altes Projekt simpleIrr setzte noch auf gmans Irrlicht Wrapper für BlitzMax auf, das neue Projekt wird direkt in C++ implementiert und bietet eine gemeinsame Schnittstelle für alle drei Sprachen, während simpleIrr nur für BlitzMax gedacht war.
Ziel ist es einen ähnlich einfachen Syntax wie den von Blitz3D zu implementieren. gman hat mit seinem Irrlicht Wrapper zwar hervorragende Arbeit geleistet aber die Syntax ist halt an das Original angelehnt und beinhaltet elendig lange Funktionsnamen und kaum Vereinfachungen.
Derzeit bin ich bei Version 0.15, also noch ganz am Anfang. Es war zunächst wichtig alle benötigten Komponenten zusammen zu fassen und etwas zum "herum spielen" zu schaffen. Dieser Schritt ist getan, es sind alle drei Engines eingebaut ... nun folgt Schritt für Schritt die Komplettierung.
Um den Syntax mal zu zeigen poste ich hier den Quelltext des Blitz3D Samples welches dem Archiv beiliegt:
Code:
Include "../simple3D.bb"
Print "Bitte wähle das Device aus:"
Print " "
Print "1 = DirectX 9"
Print "2 = OpenGL"
Print "3 = Software"
Print " "
dev = Input("> ")
Select dev
   Case 1
      renderer = DEV_DX9
      rend$ = "DirectX 9"
   Case 2
      renderer = DEV_OGL
      rend$ = "OpenGL"
   Case 3
      renderer = DEV_SOFTWARE
      rend$ = "Software Renderer"
   Default
      renderer = DEV_DX9
      rend$ = "DirectX 9"
End Select
irrlicht% = s3d_Init()
s3d_Options(irrlicht, renderer, 1, 0)
s3d_SetAudioDriver(irrlicht, DRV_WIN_MM)
s3d_ClsMode(irrlicht, 1, 1)
s3d_ClsColor(irrlicht, 90, 120, 255)
result% = s3d_Graphics3D(irrlicht, 800, 600, 32, 0)
If result = 0 Then End
s3d_AddZip(irrlicht, "media.zip", 1, 1)
cam% = s3d_CreateFPSCamera(irrlicht, 0, 0.01, 80.0)
light% = s3d_CreateLight(irrlicht,LIGHT_POINT, 0)
light2% = s3d_CreateLight(irrlicht, LIGHT_POINT, 0)
light3%= s3d_CreateLight(irrlicht, LIGHT_POINT, 0)
boden% = s3d_LoadMesh(irrlicht, "plane/plane.b3d", 0)
s3d_ScaleTexture(boden, 0, 8.0, 8.0)
s3d_PositionEntity(light, -10, 50, -30)
s3d_PositionEntity(light2, 0.0, 50.0, 50.0)
s3d_PositionEntity(light3,0.0, -0.0, 0.0)
s3d_LightCastShadows(light, 1)
crate% = s3d_LoadMesh(irrlicht, "wcrate/wcrate.b3d", 0)
s3d_EntityPhysics(boden, PHYS_BOX, 0.0)
s3d_PositionEntity(crate, 0.0, 50.0, 0.0)
s3d_PositionEntity(boden, 0.0, 0.0, .00)
s3d_PositionEntity(cam, 0.0, 10.0, -20.0)
s3d_HideEntity(crate)
s3d_EntityShadow(crate)
s3d_SetGravity(-9.81 * 16.0)
sound% = s3d_LoadSound(irrlicht, "music.mod", S_AUTO_DETECT, 0)
s3d_Play3DSound(sound, 0)
s3d_PositionSound(sound, 0, 1, 0)
time%      = MilliSecs()
fps%      = -1
last_fps%   = -1
Repeat
   fps = s3d_GetFPS(irrlicht)
   If fps <> last_fps
      last_fps = fps
      title$ = "FPS: " + fps + " | " + rend$
      s3d_AppTitle(irrlicht, title)
   EndIf
   
   now = MilliSecs()
   If now-time > 2000
      crate2% = s3d_CopyMesh(crate, 0)
      s3d_PositionEntity(crate2, Rand(-1.0, 1.0), 50, Rand(-1.0, 1.0))
      s3d_EntityPhysics(crate2, PHYS_BOX, .5)
      s3d_EntityShadow(crate2)
      time = now
   EndIf
      
   s3d_CameraListener(cam)
   
   active = s3d_RenderWorld(irrlicht)
   
Until active <> 1 Or s3d_KeyHit(irrlicht, KEY_ESCAPE) = True
s3d_Drop(irrlicht)
End
Hier noch ein Screenshot vom aktuellen Sample ... den 3D Sound müsst ihr Euch beim Bild halt ausdenken 


Das gesamte Archiv kann man sich 
>>hier<< herunterladen (ca. 1,9MB). Ein ausführbares Beispiel ist im Verzeichnis "sample" zu finden, der Source liegt ebenfalls bei. Das alles ist "Windows only". Für BlitzMax wird es aber auch eine Linux und Mac Version geben.
Ich bedanke mich für die Aufmerksamkeit 
