Monkey S3D

Kommentare anzeigen Worklog abonnieren

Worklogs Monkey S3D

Alpha und Parents

Samstag, 14. Januar 2012 von Farbfinsternis
Wichtig: S3D funktioniert nicht mit der Monkey Demo, erst ab Version 052 ist OpenGL verfügbar!

Version 0.12 bringt einige Verbesserungen mit sich. So ist nun das Culling beeinflussbar, es können transparente Texturen verwendet werden und man kann Objekte an andere hängen (Parenting)

Changelog:
Code: [AUSKLAPPEN]

added   : Vector.setW:Void(w:Float = 1.0)
added   : Light.setLightType:Void(lightType:Int = 1.0)
added   : Entity.addChild:Void(child:Entity)
added   : Mesh.setCulling:Void(culling:Int = 0)
added   : MeshCulling:Void(mesh:Entity, culling:Int = GL_BACK)
changed   : S3D.createCamera() now has the optional parameter "parent:Entity"
changed : S3D.createLight() now has the optional parameter "lightType:Int = LIGHT_POINT" and "parent:Entity"
changed : S3D.loadMesh() now has the optional parameter "parent:Entity"
changed : S3D.refMesh() now has the optional parameter "parent:Entity"
changed   : CreateCamera() now has the optional parameter "parent:Entity"
changed : CreateLight() now has the optional parameter "lightType:Int = LIGHT_POINT" and "parent:Entity"
changed : LoadMesh() now has the optional parameter "parent:Entity"
changed : CloseMesh() now has the optional parameter "parent:Entity"
changed : you can now use transparent texures
changed : backface culling is now active per default but set to "no culling"
surprise: the Example works on Android, GLFW and iOS


user posted image

Das Archiv beinhaltet nun nicht nur das Modul selbst, sondern auch einen Ordner im Monkey-Verzeichnis "bananas". Einfach das S3D Archiv über die Monkey Installation entpacken und alles sollte dort landen wo es hingehört.

Man kann nun Objekte an andere anhängen (Parenting) was aber derzeit eher als "experimentell" anzusehen ist. Die Position wird zwar korrekt übernommen, die Rotation derzeit noch nicht.

Die zweite Neuerung ist dass man nun transparente Texturen verwenden kann und das "Culling" auf 0 (kein Culling [Default]), GL_FRONT und GL_BACK setzen kann. Dazu gibt es die Methode "setCulling()" im Mesh oder die Funktion MeshCulling().

Das Example läuft nicht out-of-the-box:

  • wähle das Target (GLFW, Android oder iOS)
  • erstelle das Example ohne es auszuführen (Build)
  • gehe in das Build Verzeichnis des gewählten Targets und öffne die CONFIG.TXT
  • füge der Liste der Textdateien die Typen *.obj und *.mtl hinzu (|*.obj|*.mtl)
  • starte das Example erneut, diesmal darf es auch "Run" sein.

Unter iOS ist zu beachten dass die Option "DepthBuffer" in der CONFIG.TXT auf "true" zu setzen ist.

> Download S3D 0.12 inkl. Example "Sky Isle" <

Viel Spaß mit 3D auf Android und iOS! Wink

Monkey goes 3D

Freitag, 13. Januar 2012 von Farbfinsternis
Einige haben evtl. den Thread im Monkey Sub verfolgt, nun ist es nicht mehr nur eine Spielerei sondern ein echtes Projekt. Gerade weil Mark Sibly persönlich dieses Projekt unterstützt und hier und da eingreift.

Ziel dieses Projekts ist es den Blitz3D Sprachstandard so weit es möglich ist auf mobile Plattformen wie Android oder iOS zu übertragen und dort ebenso einfach 3D Spiele zu erstellen wie dies mit Blitz3D möglich ist.

Derzeit kann man mit S3D

  • Meshes laden wenn sie im Wavefront Object (*.obj) Format vorliegen
  • Meshes rotieren, positionieren und skalieren
  • Lichter erzeugen (1)
  • Referenzen von geladenen Meshes erzeugen (2)
  • den ganzen Kram hochperformant auf GLFW, Android und iOS ausführen.


zu (1): OpenGL ES 1.1 unterstützt max. 8 Lichtquellen. Eigentlich muss man OGL die Nummer der Lichtquelle ansagen die man anschalten, translieren oder was auch immer will, S3D regelt das selbst. Erzeugt man in S3D eine neunte Lichtquelle bekommt man "Null" als Ergebnis zurück und weiß dass man alle verfügbaren Lichtquellen verwendet hat.

zu (2): Eine Referenz auf ein Mesh ist _keine_ Kopie des gesamten Meshes. Geometrie und Textur wird vom geladenen Mesh gelesen. Die Position, Rotation und Skalierung kann für jede Referenz individuell festgelegt werden. Beispiel: Man lädt einen Baum und erzeugt 100 Referenzen. Jede Referenz kann gedreht, skaliert und positioniert werden. Wird das Original-Mesh verändert, ändert sich auch die Referenz.

Im englischen Forum gibt es bereits ein paar Releases, für dieses Worklog will ich aber ein angepasstes und verbessertes Beispiel posten, darum heute hier kein Link.