simpleIrrlicht - Irrlicht in "Einfach"
Bugfixes und Animationen
![](/themes/Standard/Forum/icon_minipost.png)
Ist ja nicht einmal ein Jahr her dass es hier den letzten Eintrag gab
Version 0.14 bringt zum Einen dass wieder alle vier Targets (DirectX9, OpenGL, Softwarerenderer, Burningsoftware) verwendet werden können und zum anderen dass viele Bugs entfernt wurden.
Ansonsten habe ich jetzt angefangen mich um die Models zu kümmern. LoadAnimSeq und Animate sind nun verfügbar und laufen gut.
Desweiteren wurden viele Bugs entfernt, unter anderem der eine fiese, der LoadMD2 abschmieren ließ, während LoadAnimMesh lief, obwohl beide dieselbe Funktion verwenden.
Lichter verwenden jetzt ihren zugewiesenen Typ ... dieser Bug war besonders blöd weil ohne Dokumentation die API geändert wurde. Gewühle in der Finsternis des Irrlicht Codes brachte es zutage.
CreatePlane() verwendet nun die Irrlicht 1.9 API und schmiert nicht mehr ab wenn eine Unterteilung übergeben wird. Im Moment wird die Subdivision leider nicht für das Texture-Repeat verwendet, aber da ist lösbar.
Der Eventhandler tut derzeit leider gar nichts. Derzeit habe ich keine Ahnung was da in der 1.9 verbockt wurde ... das heißt dass weder Maus noch Tastatur im Moment registriert werden. Komischerweise funktioniert die FPSCamera wie gehabt. Muss wohl noch etwas tiefer forschen.
Stay tuned.
![Wink](/forum/images/smiles/icon_wink.gif)
Version 0.14 bringt zum Einen dass wieder alle vier Targets (DirectX9, OpenGL, Softwarerenderer, Burningsoftware) verwendet werden können und zum anderen dass viele Bugs entfernt wurden.
Ansonsten habe ich jetzt angefangen mich um die Models zu kümmern. LoadAnimSeq und Animate sind nun verfügbar und laufen gut.
Desweiteren wurden viele Bugs entfernt, unter anderem der eine fiese, der LoadMD2 abschmieren ließ, während LoadAnimMesh lief, obwohl beide dieselbe Funktion verwenden.
Lichter verwenden jetzt ihren zugewiesenen Typ ... dieser Bug war besonders blöd weil ohne Dokumentation die API geändert wurde. Gewühle in der Finsternis des Irrlicht Codes brachte es zutage.
CreatePlane() verwendet nun die Irrlicht 1.9 API und schmiert nicht mehr ab wenn eine Unterteilung übergeben wird. Im Moment wird die Subdivision leider nicht für das Texture-Repeat verwendet, aber da ist lösbar.
Der Eventhandler tut derzeit leider gar nichts. Derzeit habe ich keine Ahnung was da in der 1.9 verbockt wurde ... das heißt dass weder Maus noch Tastatur im Moment registriert werden. Komischerweise funktioniert die FPSCamera wie gehabt. Muss wohl noch etwas tiefer forschen.
Stay tuned.
Entities
![](/themes/Standard/Forum/icon_minipost.png)
![user posted image](https://raw.githubusercontent.com/bruZard/sirr/master/misc/screenshots/v0.13.jpg)
BlitzBasic: [AUSKLAPPEN]
Include "../simpleIrrlicht.bb"
Include "../keycodes.bb"
AntiAlias(8)
Graphics3D(1280, 720)
cam% = CreateFPSCamera()
cube% = CreateCube()
c% = CreateCube()
light01% = CreateLight()
CameraMoveSpeed(cam, 0.05)
tex% = LoadTexture("grunge01.jpg")
EntityTexture(cube, tex)
EntityAlpha(cube, 0.5)
EntityColor(c, 255, 0, 0)
EntityParent(c, cube)
PositionEntity(cam, 0, 0, -12)
PositionEntity(c, 0, 0, 12)
RotateEntity(light01, 90, 0, 0)
test% = CopyEntity(c)
PositionEntity(test, 15, 0, 0)
EntityColor(test, 255, 255, 0)
RotateEntity(test, 45, 0, 0)
While Not KeyHit(KEY_ESCAPE)
AppTitle("simpleIrrlicht -- FPS: " + GetFPS())
RenderWorld()
Wend
Wie man im Bild sehen kann funktioniert EntityAlpha jetzt ganz passabel. Wie man erahnen kann ... CopyEntity auch. Letzteres allerdings etwas anders als von Blitz3D gewohnt. Zwar kann man das Entity kopieren und dann die Kopie positionieren und drehen, aber es wird (derzeit) exakt so aussehen wie das Original. Das liegt daran dass ich zwar eine neue SceneNode erzeuge, deren Mesh aber den Zeiger aus dem Original enthält. Das bedeutet: Alles was ich mit dem Mesh der Node mache, wirkt sich auf alle Kopien (und das Original, wenn ich eine Kopie bearbeite) aus.
An diesem Punkt bastle ich noch und es wird wohl noch ein paar Tage dauern bis man ein wirklich eigenständiges Entity aus einem Mesh bzw. AnimMesh kopieren kann.
Ansonsten sind massig Fixes und Changes passiert:
- Irrlicht 1.9 unterstützt DirectX8 nicht mehr. In simpleIrrlicht ist für diesen Fall ein Fallback nach OpenGL eingebaut. Wer unbedingt DirectX verwenden möchte, sollte also den Treiber "DIRECT3D9" verwenden
- AppTitle funktioniert jetzt auch (wieder) zur Laufzeit
- wird beim Erzeugen eines Entities ein Parent übergeben, dann wird dieses Entity auch an der Position des Parents erzeugt und nicht, wie bisher, am Null-Punkt.
- EntityColor und EntityAlpha funktionieren jetzt über die Vertex-Colors des Meshes. Hier wird es noch Reibungspunkte mit Materialien und Shadern geben, aber für den Moment funktioniert die Vorgehensweise
- SetFPSKeyMap ist derzeit nicht zu verwenden. Zwar funktioniert die Funktion augenscheinlich, crashed aber mit der Debug-DLL. Hier ist noch etwas forschen angesagt. Die FPS-Camera kann also erstmal nur mit den Cursor-Tasten bedient werden
- EntityClass gibt nicht die Werte zurück die man von Blitz3D kennt, sondern andere und wesentlich mehr. Beispiel: Ein Cube der mittels CreateCube erzeugt wird, zwingt EntityClass dazu auch "Cube" zurückzugeben.
Auf der Website kann man nun die Version 0.13 herunterladen. Dieses Mal liegt unter "Blitzbasic\examples" auch eine ausführbare Datei bei. Da ich nicht für jede Version eine Distribution baue, sollte der geneigte User das GitHub Repository bevorzugen, auch dort stehen die DLLs und das Executable zur Verfügung.
Sowohl auf GitHub, als auch in der Distribution liegt die simpleIrrlicht.dll jetzt als Debug- und Release-Version vor.
Der Status steht jetzt bei 25% ...
Have fun, see ya later!
Texturen und Kameras
![](/themes/Standard/Forum/icon_minipost.png)
![user posted image](https://raw.githubusercontent.com/bruZard/sirr/master/misc/screenshots/v0.12.jpg)
Dieser Würfel, mit der hässlichen Textur, ist durch CreateCube() entstanden. Dann habe ich mittels LoadTexture ein Bild geladen und EntityTexture hat dem Würfel die Textur verpasst. Klassisches Blitz3D Verhalten. Die Kamera allerdings, die das Ganze hier aufgenommen hat, ist keine klassische Blitz3D Kamera. Es handelt sich hier um eine FPS (First Person Shooter) Kamera und wird mit CreateFPSCamera erzeugt.
Gut, das hatten wir schon mal in früheren Versuchen Irrlicht zu wrappen. Jetzt funktioniert das aber wirklich gut! Mit den Pfeiltasten kann man in der Welt herum sausen und sich nichts anderes angucken außer diesen Würfel ... prima.
Pfeiltasten sind aber blöd ... ich will WASD! Kannsu haben Puppe. Mit der neuen Funktion SetFPSKeyMap kann das Verhalten einer FPS-Camera beeinflusst werden. Als Parameter sind die zu verwendenden Tasten zu übergeben. Ein WASD Control sähe also so aus:
BlitzBasic: [AUSKLAPPEN]
cam% = CreateFPSCamera()
SetFPSKeyMap(cam, KEY_KEY_W, KEY_KEY_S, KEY_KEY_A, KEY_KEY_D, KEY_SPACE, KEY_C)
Ansonsten ist intern enorm viel passiert. Das größte Problem war immer dass Blitz3D alle Objekte als Entities und somit gleich behandelt. Irrlicht differenziert aber zwischen einer Kamera, einem Mesh und einem Licht. Früher habe ich das mit aufwändigen Switches und Loops zu emulieren versucht, heute kommt ein wundervolles Template zum tragen ... simpleIrrlicht war noch nie so schnell wie jetzt
![Wink](/forum/images/smiles/icon_wink.gif)
Nochmal kurz zur Textur zurück: Es werden jetzt grundsätzlich alle Texturen mit dem Setting: "Qualität bevorzugt!" erzeugt und geladen. Außerdem kann man jetzt auch Texturen verwenden die nicht "Power of 2" sind.
Stay tuned!
Der Ninja tanzt
![](/themes/Standard/Forum/icon_minipost.png)
![user posted image](https://raw.githubusercontent.com/bruZard/sirr/master/misc/screenshots/v0.11.jpg)
Man kann jetzt ...
... animierte und statische Meshes laden
... Spheres, Cubes und Planes erstellen
... Alles positionieren, bewegen und drehen mittels PositionEntity, RotateEntity, MoveEntity und TurnEntity
Der Status steht bei 20% ... noch reichlich zu tun.
Den Quelltext inkl. DLL gibt es natürlich auf GitHub.
back to the roots
![](/themes/Standard/Forum/icon_minipost.png)
Ich weiß ... langsam wird es langweilig. Aber egal, weiter geht es. Wieder ganz am Anfang, wieder Irrlicht. Diesmal aber mit statisch gelinkter Irrlicht.lib und der Erfahrung eines Jahrzehnts.
In den letzten drei Jahren habe ich eine Menge gelernt und fühle mich nun sicher in der Irrlicht / C++ Umgebung. Im Gegensatz zum ersten Irrlicht-Versuch.
Am Anfang sollte Irrlicht so implementiert werden wie Irrlicht nun einmal aussieht, jetzt wird Irrlicht herunter gebrochen und auf den Blitz3D Funktionsumfang abgebildet. Einige Dinge sind obsolet, einige Sachen müssen anders verwendet werden und andere Funktionen sind ganz neu.
Der simpleIrrlicht Source bildet nun die Funktionskategorien von Blitz3D ab und versucht nicht mehr irgendetwas neu zu ordnen. Alle Funktionen sind im C-Style in der DLL enthalten, können also von jeder Programmiersprache genutzt werden die DLL's verwenden kann ... ja, Linux und macOS Fraktion, das seid nicht Ihr.
Was macht simpleIrrlicht mit Blitz3D?
Es ersetzt alle Funktionen die eigentlich einen DirectX7 Kontext erwarten. Das heißt dass von 3D über 2D bis hin zum Sound und Input alles ersetzt wird was vorher auf DX7 gesetzt hat. Mit simpleIrrlicht fällt DX7 weg und Ihr habt die Wahl zwischen DirectX8, DirectX9, OpenGL (Default) und zwei Software-Rendern.
Wer jetzt denkt er könnte seinen alten Blitz3D Code einfach neu kompilieren: Leider nicht. Einige Sachen sind so anders dass das nicht funktioniert. Bspw. ist eine Plane nicht mehr unendlich groß, ein Terrain wird anders unterteilt als im Original usw.
Trotzdem nichts mehr auf den DX7 Kontext zugreift, wird dieser dennoch von Blitz3D erzeugt. Wer das nicht möchte, dem sei zu BlitzPlus geraten, denn dort ist das alles Neuland. Das derzeitige Release enthält eine DECLS für Blitz3D und BlitzPlus. BlitzMax stelle ich mal hinten an, denn sonst verzettele ich mich wieder. Auch das ganze EyeCandy Gedöns muss warten.
Wo gibt es den geilen Scheiß?
Zum Einen kann man sich das Release (für Blitz3D und BlitzPlus) auf der offiziellen Seite ziehen, zum Anderen gibt es noch das Repository auf GitHub.
Back to the roots!
In den letzten drei Jahren habe ich eine Menge gelernt und fühle mich nun sicher in der Irrlicht / C++ Umgebung. Im Gegensatz zum ersten Irrlicht-Versuch.
Am Anfang sollte Irrlicht so implementiert werden wie Irrlicht nun einmal aussieht, jetzt wird Irrlicht herunter gebrochen und auf den Blitz3D Funktionsumfang abgebildet. Einige Dinge sind obsolet, einige Sachen müssen anders verwendet werden und andere Funktionen sind ganz neu.
Der simpleIrrlicht Source bildet nun die Funktionskategorien von Blitz3D ab und versucht nicht mehr irgendetwas neu zu ordnen. Alle Funktionen sind im C-Style in der DLL enthalten, können also von jeder Programmiersprache genutzt werden die DLL's verwenden kann ... ja, Linux und macOS Fraktion, das seid nicht Ihr.
Was macht simpleIrrlicht mit Blitz3D?
Es ersetzt alle Funktionen die eigentlich einen DirectX7 Kontext erwarten. Das heißt dass von 3D über 2D bis hin zum Sound und Input alles ersetzt wird was vorher auf DX7 gesetzt hat. Mit simpleIrrlicht fällt DX7 weg und Ihr habt die Wahl zwischen DirectX8, DirectX9, OpenGL (Default) und zwei Software-Rendern.
Wer jetzt denkt er könnte seinen alten Blitz3D Code einfach neu kompilieren: Leider nicht. Einige Sachen sind so anders dass das nicht funktioniert. Bspw. ist eine Plane nicht mehr unendlich groß, ein Terrain wird anders unterteilt als im Original usw.
Trotzdem nichts mehr auf den DX7 Kontext zugreift, wird dieser dennoch von Blitz3D erzeugt. Wer das nicht möchte, dem sei zu BlitzPlus geraten, denn dort ist das alles Neuland. Das derzeitige Release enthält eine DECLS für Blitz3D und BlitzPlus. BlitzMax stelle ich mal hinten an, denn sonst verzettele ich mich wieder. Auch das ganze EyeCandy Gedöns muss warten.
Wo gibt es den geilen Scheiß?
Zum Einen kann man sich das Release (für Blitz3D und BlitzPlus) auf der offiziellen Seite ziehen, zum Anderen gibt es noch das Repository auf GitHub.
Back to the roots!
Weiter gehts...
![](/themes/Standard/Forum/icon_minipost.png)
Keine Ahnung wann irgend eines meiner Projekte mal fertig wird, aber an dieser Baustelle hier werde ich jetzt erstmal weiter frickeln.
Das Projekt liegt nun auf GitHub, inklusive C++ Source: https://github.com/bruZard/bo3d
Was schon geht und was noch nicht (derzeit noch sehr übersichtlich) findet man hier: http://bo3d.colorflow.de/
Leider kann man nicht alles bei Github lagern, somit müssen die DLLs von hier bezogen werden: http://bo3d.colorflow.de/ogre/example.zip
Nun geht es wieder an den Source ... es sollen doch alle Einträge grün werden....
Das Projekt liegt nun auf GitHub, inklusive C++ Source: https://github.com/bruZard/bo3d
Was schon geht und was noch nicht (derzeit noch sehr übersichtlich) findet man hier: http://bo3d.colorflow.de/
Leider kann man nicht alles bei Github lagern, somit müssen die DLLs von hier bezogen werden: http://bo3d.colorflow.de/ogre/example.zip
Nun geht es wieder an den Source ... es sollen doch alle Einträge grün werden....
0.19
![](/themes/Standard/Forum/icon_minipost.png)
Heute wieder nur ein kleines Update ... ein paar Bugfixes und nur wenige neue Funktionen.
Derzeit arbeite ich daran die "Child" Funktionen zu implementieren um danach das Material-System (Brushes) einbauen zu können. Ogre3D behandelt Childs nicht als eigenständige Entities, sondern sieht ein sehr komplexes Verfahren vor um mit Subobjekten umzugehen. Ich muss "nur" das SubMesh extrahieren, ein neues Mesh erzeugen, dem das SubMesh zuweisen, ein neues Entity mit dem Mesh erzeugen, eine neue Node bauen, das neue Entity dran hängen und ........... es ist sau viel Arbeit ....
Changes:
Code: [AUSKLAPPEN]
added : TMesh.CountChildren()
added : CountChildren()
fixed : Prefabs skalieren nun exakt so wie in Blitz3D
fixed : die Z-Achse wird nun behandelt wie in Blitz3D
fixed : fehlerhafte Positionierung von Entities bei bestimmten "Konstellationen"
>> bo3D V0.19 << (ca. 3,8MB)
Derzeit arbeite ich daran die "Child" Funktionen zu implementieren um danach das Material-System (Brushes) einbauen zu können. Ogre3D behandelt Childs nicht als eigenständige Entities, sondern sieht ein sehr komplexes Verfahren vor um mit Subobjekten umzugehen. Ich muss "nur" das SubMesh extrahieren, ein neues Mesh erzeugen, dem das SubMesh zuweisen, ein neues Entity mit dem Mesh erzeugen, eine neue Node bauen, das neue Entity dran hängen und ........... es ist sau viel Arbeit ....
Changes:
Code: [AUSKLAPPEN]
added : TMesh.CountChildren()
added : CountChildren()
fixed : Prefabs skalieren nun exakt so wie in Blitz3D
fixed : die Z-Achse wird nun behandelt wie in Blitz3D
fixed : fehlerhafte Positionierung von Entities bei bestimmten "Konstellationen"
>> bo3D V0.19 << (ca. 3,8MB)
Prefabs
![](/themes/Standard/Forum/icon_minipost.png)
Kein wahnsinnig riesiges Update, aber ein paar Additions und einige Fixes.
>> Download bo3D 0.18 << (ca. 3,8MB)
Changes für 0.18
Code: [AUSKLAPPEN]
added : TMesh.CreatePrefab()
added : TMesh.CreateCube()
added : TMesh.CreateSphere()
added : TMesh.CreatePlane()
added : CreateCube()
added : CreateSphere()
added : CreatePlane()
fixed : die AspectRatio des Viewports wird nun korrekt berechnet.
fixed : neue Cameras werden nun mit korrekter Range erzeugt
Beachte:
Wer das OOP Interface nutzen möchte darf auf die Umwege über TMesh.CreateCube(), TMesh.CreateSphere() und TMesh.CreatePlane() verzichten und direkt TMesh.CreatePrefab() aufrufen. Diese Funktion hat den Paramter "typ:Int" welcher folgende Werte annehmen kann:
>> Download bo3D 0.18 << (ca. 3,8MB)
Changes für 0.18
Code: [AUSKLAPPEN]
added : TMesh.CreatePrefab()
added : TMesh.CreateCube()
added : TMesh.CreateSphere()
added : TMesh.CreatePlane()
added : CreateCube()
added : CreateSphere()
added : CreatePlane()
fixed : die AspectRatio des Viewports wird nun korrekt berechnet.
fixed : neue Cameras werden nun mit korrekter Range erzeugt
- Bekannte Fehler derzeit:
- Prefabs werden noch nicht völlig korrekt skaliert erstellt
- TMesh Parents werden derzeit noch ignoriert
- in Ogre3D zeigt die negative Z-Achse nach vorn, ist noch nicht Blitz3D-like konvertiert
- der Parameter "segments" in CreateSphere() wird noch nicht unterstützt
- der Parameter "sub_divs" in CreatePlane() wird noch nicht unterstützt.
- das Example zeigt noch Version 0.13 im Fenstertitel an.
Beachte:
Wer das OOP Interface nutzen möchte darf auf die Umwege über TMesh.CreateCube(), TMesh.CreateSphere() und TMesh.CreatePlane() verzichten und direkt TMesh.CreatePrefab() aufrufen. Diese Funktion hat den Paramter "typ:Int" welcher folgende Werte annehmen kann:
- PT_CUBE
- PT_SPHERE
- PT_PLANE
Framework und so...
![](/themes/Standard/Forum/icon_minipost.png)
Changelog:
Code: [AUSKLAPPEN]
added : TOgre.MouseHit()
added : MouseHit()
changed : Input-Events werden jetzt in RenderWorld() in Buffer gesichert
changed : Es ist nun zwingend bo3D als Framework in BMax zu verwenden
changed : [TOgre.]getMouseZSpeed() heißt jetzt MouseZSpeed()
changed : [TOgre.]isMouseDown() heißt jetzt MouseDown()
fixed : Resource-Locations werden nicht mehr mehrfach in die Liste der Locations eingetragen
Die wichtigste Änderung ist wohl dass ich BlitzMax User nun zwinge bo3D als Framework zu verwenden. Dies war notwendig weil ich einige globale BRL Funktionen überschreiben muss und Mark Sibly mir das nur gestattet wenn mein Modul als Framework verwendet wird. In Blitz3D und BlitzPlus stellt dies kein Problem dar.
Somit heißt "getMouseZSpeed()" nun wieder "MouseZSpeed()" und "isMouseDown()" darf wieder "MouseDown()" heißen. "MouseHit()" ist in 0.17 neu hinzu gekommen.
Der Anfänger muss nun aber nicht ins Schwitzen geraten. Einfach das Modul statt mit "Import" mit "Framework" einbinden und alles funktioniert wie es soll!
Ansonsten bietet v0.17 hauptsächlich Fehlerbereinigungen, Änderungen und Optimierungen. Wenn wesentliche neue Features dazu gekommen sind werde ich ein neues Release hochladen.
Code: [AUSKLAPPEN]
added : TOgre.MouseHit()
added : MouseHit()
changed : Input-Events werden jetzt in RenderWorld() in Buffer gesichert
changed : Es ist nun zwingend bo3D als Framework in BMax zu verwenden
changed : [TOgre.]getMouseZSpeed() heißt jetzt MouseZSpeed()
changed : [TOgre.]isMouseDown() heißt jetzt MouseDown()
fixed : Resource-Locations werden nicht mehr mehrfach in die Liste der Locations eingetragen
Die wichtigste Änderung ist wohl dass ich BlitzMax User nun zwinge bo3D als Framework zu verwenden. Dies war notwendig weil ich einige globale BRL Funktionen überschreiben muss und Mark Sibly mir das nur gestattet wenn mein Modul als Framework verwendet wird. In Blitz3D und BlitzPlus stellt dies kein Problem dar.
Somit heißt "getMouseZSpeed()" nun wieder "MouseZSpeed()" und "isMouseDown()" darf wieder "MouseDown()" heißen. "MouseHit()" ist in 0.17 neu hinzu gekommen.
Der Anfänger muss nun aber nicht ins Schwitzen geraten. Einfach das Modul statt mit "Import" mit "Framework" einbinden und alles funktioniert wie es soll!
Ansonsten bietet v0.17 hauptsächlich Fehlerbereinigungen, Änderungen und Optimierungen. Wenn wesentliche neue Features dazu gekommen sind werde ich ein neues Release hochladen.
Was zum gucken
![](/themes/Standard/Forum/icon_minipost.png)
Zum antesten habe ich mal die Version 0.16 des Wrappers für BlitzMax hochgeladen. Die Datei changes.txt zeigt was bisher implementiert ist.
Die Änderungen für heute:
Code: [AUSKLAPPEN]
added : TEntity.FreeEntity()
added : TEntity.ShowEntity()
added : TEntity.HideEntity()
added : TOgre.TrisRendered()
added : TMesh.LoadAnimMesh()
added : FreeEntity(entity%)
added : ShowEntity(entity%)
added : HideEntity(entity%)
added : TrisRendered()
added : LoadAnimMesh()
added : AntiAlias()
Download bo3D 0.16 (ca. 4,5MB)
Die Änderungen für heute:
Code: [AUSKLAPPEN]
added : TEntity.FreeEntity()
added : TEntity.ShowEntity()
added : TEntity.HideEntity()
added : TOgre.TrisRendered()
added : TMesh.LoadAnimMesh()
added : FreeEntity(entity%)
added : ShowEntity(entity%)
added : HideEntity(entity%)
added : TrisRendered()
added : LoadAnimMesh()
added : AntiAlias()
Download bo3D 0.16 (ca. 4,5MB)
Gehe zu Seite 1, 2, 3 ... 13, 14, 15 Weiter