simpleIrrlicht - Irrlicht in "Einfach"

Kommentare anzeigen Worklog abonnieren
Gehe zu Seite Zurück  1, 2, 3 ... 12, 13, 14, 15  Weiter

Worklogs simpleIrrlicht - Irrlicht in "Einfach"

Tisch abwischen, Blatt umdrehen!

Mittwoch, 16. September 2009 von Farbfinsternis
Ich habe nocheinmal neu angefangen mit simple3D. Jetzt kann ich bis hier die "OH MANN!", "NÖÖÖÖ!" und "DAT WIRD DOCH NIE FEDDICH!" Rufe hören, aber schaut erstmal warum ich neu angefangen habe.

Die neue Version verzichtet komplett auf gmans Irrlicht-Wrapper. Ich implementiere die Engine mittels C++ als DLL neu. Das spart nicht nur einen riesen Umweg, sondern auch eine Menge Platz. Nachteil ist natürlich dass man nun nicht mehr auf die nativen Funktionen der Irrlicht Engine zugreifen kann die gman so pingelig genau implementiert hat. Macht aber nichts, ich will hier eine 3D Engine basteln ... wer die Irrlicht Funktionen nutzen möchte kann gmans Wrapper verwenden, da sind sie alle drin.

simple3D unterstützt jetzt kein DX8 mehr. DX7 ist schon lange aus Irrlicht rausgeflogen und DX8 wird wohl mit 1.6 rausfliegen. Ich bin diesen Schritt jetzt schon gegangen um diese lästige, zusätzliche DX8 DLL loszuwerden. Nun unterstützt simple3D zwei Software-Renderer, DirectX9 und OpenGL.

BlitzMax: [AUSKLAPPEN]

SuperStrict

Framework sedm.simple3d
Import brl.keycodes

Graphics3D(800, 600)

Local cam:Int = CreateCamera()
Local cube:Int = CreateCube()
Local light:Int = CreateLight()

PositionEntity(cube, 0.0, 0.0, 15.0)
PositionEntity(light, -25.0, 25.0, -25.0)
PositionEntity(cam, 0.0, 0.0, -15.0)

LightColor(light, 1.0, 0.0, 0.0)

Repeat
TurnEntity(cube, 0.01, 0.01, 0.01)
If Not RenderWorld() Then Exit
Until isKeyDown(KEY_ESCAPE)

End


So sieht der Code einer simple3D Anwendung derzeit aus und viel mehr kann s3D auch noch nicht. Wer sich das mal aus der Nähe ansehen möchte kann sich unter folgendem Link eine sehr, sehr, sehr, sehr frühe Version herunterladen. Bitte die readme konsumieren!

simple3D standalone 0.1 (ca. 1,5MB)

So, nun Bierchen aufgemacht, Ärmel hoch und ran an den Speck.

[EDIT]
Achtung! Die Änderungen die BtbN vorgeschlagen hat haben zwar dafür gesorgt dass eine DLL weniger benötigt wird, allerdings lässt sich jetzt das Sample nicht mehr kompilieren. Ich rate von der Verwendung des Moduls ab bis das geklärt ist.
[/EDIT]

41 Funktionen von fast 300 fertig

Freitag, 11. September 2009 von Farbfinsternis
Wie der Titel verrät ist die hier veröffentlichte Version noch meilenweit von einem "Production" Status entfernt. Sie soll nur dazu dienen zu schauen wie sich das Modul "anfühlt".

Voraussetzungen:
Als erstes benötigt ihr das Irrlicht-Wrapper 1.5.1 Paket von gman. Dieses könnt Ihr von seiner Website herunterladen. Im Mod Verzeichnis von simple3D befinden sich bereits vorkompilierte Versionen für Linux und Windows.

Windows:
Unter Windows gibt es derzeit leider keine Möglichkeit Irrlicht statisch zu linken, weshalb ihr immer zwei DLLs mit euch herum schleppen müsst. Diese DLLs findet ihr im Downloadpaket von gmans Irrlicht-Wrapper unter \irrlicht.mod\lib\win\
Diese beiden DLLs müssen sich immer im jeweiligen Projektverzeichnis befinden. Praktisch also immer "neben" eurer Exe.

MacOS:
Da gman noch kein Build für den Mac released hat und ich keinen Mac besitze müssen die Apfel-Freunde leider warten bis sich dahingehend Änderung einstellt. MacOS kompatibel ist das Mod, es muss halt nur jemand für diese Plattform kompilieren

Linux:
Unter Linux ist es notwendig sich zunächst die originale Irrlicht Distribution in der Version 1.5.1 von der Sourceforge-Site des Projektes herunter zu laden. Wenn ihr das habt, einfach das Archiv entpacken und in der Konsole in den Ordner /source/irrlicht/ wechseln. Hier tippert ihr ein kurzes "make" ein und wartet bis der g++ fertig ist. Anschliessend findet ihr im /source/irrlicht/ Verzeichnis die Datei libIrrlicht.a, diese muss noch nach libIrrlichtLin.a umbenannt werden. Habt ihr das getan verschiebt ihr diese Datei in den BlitzMax /mod/ Ordner und dort unter irrlicht.mod/core.mod

Dokumentation:
Da sich Mark Siblys "docmods" beharrlich weigert mein Modul zu dokumentieren habe ich das HotDocs Ergebnis beigelegt. Ihr findet die Doks unter /sedm.mod/simple3d.mod/hotdocs/sedm.simple3d/_index.html

Download:
simple3D 0.1 (ca. 3MB)

Sonstiges
Die Liste aus dem letzten Eintrag habe ich gestern und heute noch aktualisiert und werde das auch weiterhin so handhaben. Hier nochmal die Legende:


  • Schwarzer Eintrag = Befehl ist vorhanden, exakt so wie er in Blitz3D vorzufinden ist
  • Roter Eintrag = Befehl ist noch nicht implementiert
  • Grüner Eintrag = Befehl ist implementiert, unterscheidet sich von Blitz3D aber im Namen oder in der Funktionsweise
  • Blauer Eintrag = Befehl ist implementiert, es gibt aber keinen vergleichbaren Befehl in Blitz3D
  • Grauer Eintrag = Der Befehl ist obsolet und wird nicht in simple3D implementiert


Hier noch das Changelog von gestern bis jetzt:

Zitat:

11.09.2009
added TTexture
added TTexture.LoadTexture, LoadTexture
added TEntity.EntityTexture, EntityTexture
added TEntity.TextureScale, TextureScale
added TEntity.TextureRotate, TextureRotate
added TEntity.EntityDistance, EntityDistance
added TEntity.EntityAlpha, EntityAlpha
added TCamera.CameraZoom, CameraZoom
added TCamera.CameraProjMode, CameraProjMode
added TCamera.CameraRange, CameraRange

10.09.2009
added TIrrlicht.ClsMode, ClsMode
added TIrrlicht.FogMode, FogMode
added TIrrlicht.FogColor, FogColor
added TIrrlicht.FogRange, FogRange
added TIrrlicht.FogDensity, FogDensity
added TEntity.CopyEntity, CopyEntity

Noch soviel zu tun

Donnerstag, 10. September 2009 von Farbfinsternis
Update 11.09. 15:08


Für alle die glauben dass morgen ein vollständiges Blitz3D für BlitzMax erscheint, hier die herbe Enttäuschung: Alles was in nachfolgender Liste rot gefärbt ist fehlt noch.

Einige Sachen sind grau eingefärbt was bedeuten soll dass es diese Befehle in simple3D nicht gibt (bspw. "UpdateWorld").
Grün gefärbte Befehle sind bereits implementiert, funktionieren aber anders als in Blitz3D oder heißen anders.
Blaue Einträge sind neu und gab es in Blitz3D nicht (bspw. Schatten).
Schwarze Einträge in dieser Liste sind final implementiert.

Damit ihr mit der in diesem Portal verfügbaren Hilfe vergleichen könnt, habe ich dieselbe Bezeichnung und Reihenfolge für die Übersicht gewählt.

Animation
fehlt komplett

Bewegung
AlignToVector
MoveEntity
PointEntity
PositionEntity
RotateEntity
ScaleEntity
TranslateEntity
TurnEntity

Brush
fehlt komplett

BSP-Maps
fehlt komplett

Diverses
fehlt komplett

Global
AntiAlias
CaptureWorld
ClearWorld
Dither
HWMultiTex
HWTexUnits
RenderWorld
UpdateWorld
WBuffer
WireFrame
ClsColor
AddZip
Init
ClsMode
FogColor
FogMode
FogRange
FogDensity

Kamera
CameraClsColor : Global/ClsColor
CameraClsMode : Global/ClsMode
CameraFogColor : Global/FogColor
CameraFogMode : Global/FogMode
CameraFogRange : Global/FogRange
CameraProject
CameraProjMode
CameraRange
CameraViewport
CameraZoom
CreateCamera
ProjectedX
ProjectedY
ProjectedZ

Animation
fehlt komplett

Kontrolle
CopyEntity
EntityAlpha
EntityAutoFade
EntityBlend
EntityColor
EntityFX
EntityOrder
EntityParent
EntityShininess
EntityTexture
FreeEntity
HideEntity
ShowEntity

Licht
AmbientLight
CreateLight
LightColor
LightConeAngles
LightMesh
LightRange
LightCastShadows

MD2-Meshs
fehlt komplett

Mesh
AddMesh
CopyMesh
CreateCone
CreateCube
CreateCylinder
CreateMesh
CreateSphere
FitMesh
FlipMesh
LoadAnimMesh
LoadMesh
MeshCullBox
MeshDepth : GetMeshDepth
MeshHeight : GetMeshHeight
MeshWidth : GetMeshWidth
PositionMesh : SetMeshPosition
RotateMesh : SetMeshRotate
ScaleMesh : SetMeshScale

Pick
fehlt komplett

Screen
CountGfxModes3D
GfxDriver3D
GfxDriverCaps3D
GfxMode3D
GfxMode3DExists
Graphics3D
Windowed3D

Sprite
fehlt komplett

Status
CountChildren
DeltaPitch
DeltaYaw
EntityClass
EntityDistance
EntityInView
EntityName
EntityPitch
EntityRoll
EntityVisible
EntityX
EntityY
EntityYaw
EntityZ
FindChild
GetChild
GetParent
NameEntity

Surface
fehlt komplett

Terrain
fehlt komplett

Texturen
ActiveTextures
ClearTextureFilters
CreateTexture
FreeTexture
LoadAnimTexture
LoadTexture
PositionTexture
RotateTexture : TextureRotate
ScaleTexture : TextureScale
SetCubeFace
SetCubeMode
TextureBlend
TextureBuffer
TextureCoords
TextureFilter
TextureHeight
TextureName
TextureWidth

Transform
fehlt komplett


Wie ihr seht ist die Liste noch seeehr rot.

In der Ruhe liegt die Kraft

Freitag, 4. September 2009 von Farbfinsternis
user posted image

Das neue EventSystem ist nun eingebaut und das überschreiben der Funktionen KeyDown() und KeyHit() funktioniert Achtung! Das macht es zur Pflicht simple3D als FW zu verwenden!. Wenn Ihr das nicht möchtet kann ich die Funktionen auch mit dem Präfix "is" versehen um Kollisionen zu vermeiden.
Ein Teil der Funktionen von Blitz3D ist implementiert und im Laufe der nächsten Woche werde ich diese Geschichte komplettieren. Das Surface System von Blitz3D ist mittels Irrlicht leider nicht in Gänze adaptierbar, hier wird es einige Änderungen im Syntax geben, auch Funktionen wie MoveEntity etc. mussten umbenannt werden weil sie mit dem Core von Irrlicht kollidierten. Aber das sind nur marginale Änderungen.

Drückt die Daumen dass ich nicht von wilden Hunden gefressen werde, dann kann es nächsten Freitag ein erstes Release geben.

simpleIrr > simple3D

Donnerstag, 27. August 2009 von Farbfinsternis
Das Update rückt in greifbare Nähe, da wollte ich schonmal kundtun was sich verändert.

  • der Name wird geändert (s.o.)
  • Newton ist integraler Bestandteil des Moduls und muss/kann nicht mehr extra importiert werden
  • Alle Kollisionen basieren auf Newton
  • TIrrlicht.Init() gibt kein Objekt mehr zurück, sondern initialisiert das globale Objekt "irr:TIrrlicht". Dadurch ist das einfach mischen von prozedualer und objektorientierter Programmierung möglich. (bspw. wenn man in einem OOP Programm mal eben was prototypen möchte)
  • Das AddOn Paket zu gmans Irrlicht Wrapper (bisher wurde von dort der SmoothEventReceiver verwendet) wird nicht länger benötigt, wer sich auskennt kann es dennoch zusätzlich importieren
  • alle Methoden und Funktionen führen nun "Null-Checks" auf das Objekt irr:TIrrlicht aus, es ist somit ausgeschlossen auf ein NULL Objekt zuzugreifen.
  • Die simple3D Klassen sind keine Erweiterungen der Klasse TIrrlicht mehr, das verringert den allgemeinen Speicherbedarf des Moduls und erhöht stellenweise auch die Geschwindigkeit. Zudem kann die IDE BLIde das Modul besser parsen.
  • Alles was beim Entwickeln der letzten Version nicht funktionierte und "Leichen" im Code hinterlassen hat wurde entfernt. Bspw. das sinnfreie Callback System und das PostEffect System. Ich habe bereits erfolgreich einen Mehrpass Shader testen können, allerdings muss dieser Code erst so aufbereitet werden dass er jeden beliebigen Shader aufnehmen kann. Wer sich mit den entsprechenden Funktionen der Irrlicht Engine befasst hat wird wissen warum das sein muss. So ist bspw. das Fullscreenquad aus dem Core geflogen, dieses wird zukünftig von der entsprechenden Klasse bereitgestellt.


So, nun drückt ihr aber bitteschön alle ganz fest die Daumen das Papa nicht zu lange mit der neuen Version auf sich warten lässt.

stay tuned!

Nach dem Spiel ist vor dem Spiel

Samstag, 6. Juni 2009 von Farbfinsternis
Surfaces sind nicht vergessen, aber erstmal verschoben. Viele Probleme konnten in den letzten Tagen gelöst werden, viele sind noch in der Pipeline und harren ihrer Lösung.
Um simpleIrr praxistauglich zu machen habe ich angefangen "blox'n'balls" mittels simpleIrr neu zu programmieren. Jedesmal wenn ich auf ein Problem stoße dass ich nur durch direkte Nutzung des gman Irrlicht-Wrappers lösen kann, übertrage ich die Lösung auf einen simpleIrr Syntax. Zuletzt ist dies passiert mit den Funktionen MeshWidth(), MeshHeight() und MeshDepth die benötigt wurden um Newton zu sagen wie groß die Kollisionsobjekte sein müssen.

Leider hat Klepto es so eingerichtet dass man einem Newton-Objekt ein Mesh mittels SetParent() zuweist, das ist aber verwirrend weil man ja nicht das Mesh kontrolliert sondern das Newton-Objekt. Vielleicht wäre es besser einen Befehl zu definieren ala EntityConnectPhysics(entity, physics_entity). Naja, das sind alles Spielereien, es fehlt noch genug um wirklich ein Spiel nur mit simpleIrr zu machen. Wieder ran an die Tasten, Spiele warten auf uns!

Putzen, fegen, wischen

Mittwoch, 3. Juni 2009 von Farbfinsternis
Im Moment mache ich die Hausfrau im Hause simpleIrr. Ich checke allerhand Kombinationen und versuche reale Spielprojektsituationen zu erzeugen. Wie ich feststellen musste war das überfällig denn viele Dinge die im Sample gingen, funktionieren im realen Einsatz nicht mehr. So musste ich gestern feststellen dass klepto2s Newton Sample nicht mehr funktionierte und Fehler an Stellen konstatierte wo ich sie nie vermutet hätte, auch das auskommentieren möglicher Fehlerquellen half nicht. Während ich klepto2s Sample auf ein Barebone reduzierte, programmierte ich parallel ein ähnliches Sample welches stets klaglos seinen Dienst verrichtete während klepto2s Sample noch immer den Dienst verweigerte, obwohl es am Ende nichts mehr enthielt was mein Sample nicht auch hätte.

Essenz ist: Der Debugger von BlitzMax ist derart rudimentär dass man ihn nur als Lachnummer bezeichnen kann ... aber egal, ich bleibe am Ball.

Kleinigkeiten

Montag, 1. Juni 2009 von Farbfinsternis
Die letzten SVN Updates umfassen nur Kleinigkeiten. So kann man nun den Schattenwurf von Lichtquellen deaktivieren (per Default wirft jede Lichtquelle einen Schatten) und die dynamische Beleuchtung eines Mesh deaktivieren. Am Surface-System konnte ich noch nicht großartig schrauben, aber zumindest ist es angefangen. Desweiteren habe ich erstmal den gesamten Shaderpart wieder aus dem SVN entfernt da dieser ohnehin nicht funktionstüchtig war.

Zwar nur ein Detail aber dennoch: Die Sourcen habe ich wieder in ASCII umgewandelt damit man sie auch im SVN direkt bei Google lesen kann ohne sie erstmal runterladen zu müssen. Keine Ahnung was BLide mit den Sourcen veranstaltet, aber bei Google kommt nichts lesbares an.

Nächstes Ziel ist es zumindest eine Surface mit einem Material erzeugen zu können. Irrlicht macht das komplett anders als Blitz3D, weshalb hier gute Planung am Anfang stehen muss ... ich werde mir aber alle Mühe geben Wink

-----

Schattenwurf einer Lichtquelle (de)aktivieren:
Code: [AUSKLAPPEN]

TLight.CastShadows(enable:Int) ' True oder False

' oder :

LightCastShadows(l:TLight, enable:Int)


-----

dynamische Beleuchtung eines Mesh (de)aktiveren:
Code: [AUSKLAPPEN]

TMesh.MeshLighting(enable:Int) ' True oder False

' oder :

TAnimMesh.MeshLighting(enable:Int)

' prozeduale Funktionen dazu fehlen noch

Licht aus.

Mittwoch, 27. Mai 2009 von Farbfinsternis
Nicht falsch verstehen, nur für PostProcess ist das Licht erstmal aus. Ich habe da nun fast 3 Wochen dran verballert und nur marginale Fortschritte erzielt. Ich kümmere mich nun erstmal um das Material/Mesh-System (Surfaces in Blitz3D) und um die Neuimplementierung des Kollisionssystems. Auch der Newton-Part benötigt noch etwas Feinschliff und vor allem eine Dokumentation.

Nix

Montag, 25. Mai 2009 von Farbfinsternis
Da ich derzeit kaum vorwärts komme habe ich mich um ein neues Logo gekümmert (um überrhaupt etwas für das Projekt zu tun)

user posted image

Gehe zu Seite Zurück  1, 2, 3 ... 12, 13, 14, 15  Weiter