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
