simpleIrrlicht - Irrlicht in "Einfach"
Gehe zu Seite Zurück 1, 2, 3 ... 6, 7, 8 ... 13, 14, 15 Weiter

OIS InputManager

Ich hätte mein Changelog weiterführen sollen, jetzt ist es ungemein schwierig zu dokumentieren was neu dazu gekommen ist und was sich geändert hat. Nunja, es ist wie es ist und das Changelog wird dann halt mit ganz vielen "added" neu begonnen.
Wie versprochen habe ich heute den "Direct-Wrapper" weiter erweitert und das Example sieht derzeit so aus:
BlitzMax: [AUSKLAPPEN]
Ja, das ist ne Menge Holz ... aber das soll ja nicht so bleiben. Wie man schon an der Initialisierung des InputManagers sieht läuft nicht alles exakt so wie in C/C++. Während man "drüben" den Mouse- und KeyboardHandler einzeln initialisiert und dann auch noch EventListener erstellt, mache ich das in BlitzMax in einem Rutsch im Objekt "OIS". OIS muss ich verwenden weil ich keine Möglichkeit gefunden habe PolledInput oder BMax Events auf das Ogre3d Fenster zu "biegen". Aber hin Hinblick auf die Blitz3D/BlitzPlus Version ist das auch nicht so schlimm, denn dort stünde ich vor demselben Problem.
Ich denke dass ich noch etwa zwei Tage benötigen werde um auf den Stand der 0.49.6 zu kommen und werde dann damit beginnen das "Highlevel API" zu definieren so dass dann irgendwann das Example wieder so aussieht wie ihr es kennt.
Wie versprochen habe ich heute den "Direct-Wrapper" weiter erweitert und das Example sieht derzeit so aus:
BlitzMax: [AUSKLAPPEN]
SuperStrict
Framework sedm.bo3d
Local r:Root = Root.Create()
If r.showConfigDialog()
Local win:RenderWindow = r.initialise(True, "BlitzOgre3D")
Local scene:SceneManager = r.createSceneManager()
Local res:ResourceGroupManager = New ResourceGroupManager
Local cam:Camera = scene.createCamera()
Local vport:Viewport = win.addViewPort(cam)
Local inp:OIS = OIS.Init(win)
vport.setBackgroundColour(0.3, 0.5, 0.9)
vport.setCamera(cam)
Local w:Int = vport.getActualWidth()
Local h:Int = vport.getActualHeight()
cam.setAspectRatio(w / h)
cam.SetPosition(0.0, 0.0, 5.0)
res.addResourceLocation("media", "FileSystem", "myFiles")
res.initialiseResourceGroup("myFiles")
Local box:Entity = scene.createEntity("", "box.mesh", "myFiles")
Local rsn:SceneNode = scene.getRootSceneNode()
Local cs:SceneNode = rsn.createChildSceneNode()
cs.attachObject(box)
Repeat
r.messagePump()
inp.captureKeyboard()
inp.captureMouse()
If inp.isKeyDown(KC_ESCAPE) Then Exit
If inp.isMouseDown(MB_LEFT) Then Exit
r.renderOneFrame()
Forever
r.Shutdown()
End If
End
Ja, das ist ne Menge Holz ... aber das soll ja nicht so bleiben. Wie man schon an der Initialisierung des InputManagers sieht läuft nicht alles exakt so wie in C/C++. Während man "drüben" den Mouse- und KeyboardHandler einzeln initialisiert und dann auch noch EventListener erstellt, mache ich das in BlitzMax in einem Rutsch im Objekt "OIS". OIS muss ich verwenden weil ich keine Möglichkeit gefunden habe PolledInput oder BMax Events auf das Ogre3d Fenster zu "biegen". Aber hin Hinblick auf die Blitz3D/BlitzPlus Version ist das auch nicht so schlimm, denn dort stünde ich vor demselben Problem.
Ich denke dass ich noch etwa zwei Tage benötigen werde um auf den Stand der 0.49.6 zu kommen und werde dann damit beginnen das "Highlevel API" zu definieren so dass dann irgendwann das Example wieder so aussieht wie ihr es kennt.
Umbaupause

Nee, nicht wirklich ne Pause ... es geht im Stechschritt voran. Was sich gerade ändert ist die Art und Weise wie ich das Ganze wrappe. Während ich bis neulich noch kreativ in C/C++ herum gebastelt und mich dabei immer mehr in Sachen verzettelt habe die erreichen sollten dass soviel von Ogre3D wie möglich nutzbar wird, gehe ich nun einen anderen Weg:
Ich wrappe die Methoden der Ogre-Klassen direkt und bastele das HighLevel Interface in BlitzMax/Blitz3D dann selbst zusammen. So kann man direkt auf die Methoden der Ogre3D Engine zugreifen, kann auch mal in die API Docs schauen wenn etwas unklar ist oder sich einfach mit dem begnügen was die HighLevel API so hergibt.
Ich habe mal die HotDocs generierten Docs hochgeladen. Dort kann man (bitte die Funktionen mit dem Präfix "o_" ignorieren, die sind und werden nicht dokumentiert) schauen wie das Ganze mal aussehen soll.
Alle Klassen die Ogre3D besitzt werden in gleichnamige BlitzMax Types übersetzt. Die meisten Methoden dieser Klassen haben senselben Namen wie ihr Ogre3D Gegenstück. "Die meisten" deshalb weil BlitzMax viele Namen für sich in Besitz hält und diese ums verrecken nicht hergeben will. Aber das betrifft nur einige wenige Namen (NameSpaces würden BlitzMax ganz gut stehen).
Das Example (das mangels OIS derzeit exakt eine Sekunde läuft) sieht im Source derzeit so aus:
Code: [AUSKLAPPEN]
SuperStrict
Framework sedm.bo3d
Local mRoot:Root = Root.Create()
If mRoot.showConfigDialog()
Local mWin:RenderWindow = mRoot.initialise(True, "BlitzOgre3D")
Local mScm:SceneManager = mRoot.createSceneManager()
Local mCam:Camera = mScm.createCamera()
Local mVP:Viewport = mWin.addViewPort(mCam)
mVP.setBackgroundColour(0.3, 0.5, 0.9)
mRoot.renderOneFrame()
Delay(1000)
mRoot.Shutdown()
End If
End
Wie man sieht ist "Graphics3D" komplett entblättert und das ist gut so, denn Graphics3D soll direkt in BlitzMax/Blitz3D implementiert sein und nicht wie bisher in C. Das was man da oben sieht kann man auch aus normalen Ogre3D Tutorials ziehen, d.h. dass man auch die normalen Ogre3D Docs lesen kann um mit diesem Mod klarzukommen (wenn man denn auf diesem LowLevel Niveau arbeiten will).
Desweiteren bin ich von "GetProcAddress()" auf einen banalen "Extern" Block umgestiegen, das vereinfacht es später die Sache auf Linux und MacOS zu portieren.
Einige Dinge sind aber auch ganz anders als in Ogre3D. So erwartet die Methode Ogre::Root::createRenderWindow() eine Map mit diversen Optionen. Diese Map liesse sich zwar in BMax durch TMap simulieren aber nicht an eine C-Funktion übertragen. Deshalb habe ich entschieden dass BMax einen Pipe-separierten String schickt und C sich das dann selbst wieder auseinander pflückt.
Für alle die nicht wissen was ein(e) "Pipe" ist:
Code: [AUSKLAPPEN]
Local mySpecialWindowExtraParams:String = "title|Mein BlitzMax Ogre Window|trash|Ogre3D kennt den Parameter "trash" nicht.
Noch ein Vorteil dieser Vorgehensweise (was das LowLevel API betrifft): Ich kann die vorhandene Dokumentation fast 1:1 übernehmen wie man hier ganz gut sehen kann.
Jetzt geht es darum die API auf den Stand von 0.49.6 zu bringen und dann die Funktionen zu implementieren die auch wieder ein Graphics3D() etc. möglich machen.
stay tuned ...
Ich wrappe die Methoden der Ogre-Klassen direkt und bastele das HighLevel Interface in BlitzMax/Blitz3D dann selbst zusammen. So kann man direkt auf die Methoden der Ogre3D Engine zugreifen, kann auch mal in die API Docs schauen wenn etwas unklar ist oder sich einfach mit dem begnügen was die HighLevel API so hergibt.
Ich habe mal die HotDocs generierten Docs hochgeladen. Dort kann man (bitte die Funktionen mit dem Präfix "o_" ignorieren, die sind und werden nicht dokumentiert) schauen wie das Ganze mal aussehen soll.
Alle Klassen die Ogre3D besitzt werden in gleichnamige BlitzMax Types übersetzt. Die meisten Methoden dieser Klassen haben senselben Namen wie ihr Ogre3D Gegenstück. "Die meisten" deshalb weil BlitzMax viele Namen für sich in Besitz hält und diese ums verrecken nicht hergeben will. Aber das betrifft nur einige wenige Namen (NameSpaces würden BlitzMax ganz gut stehen).
Das Example (das mangels OIS derzeit exakt eine Sekunde läuft) sieht im Source derzeit so aus:
Code: [AUSKLAPPEN]
SuperStrict
Framework sedm.bo3d
Local mRoot:Root = Root.Create()
If mRoot.showConfigDialog()
Local mWin:RenderWindow = mRoot.initialise(True, "BlitzOgre3D")
Local mScm:SceneManager = mRoot.createSceneManager()
Local mCam:Camera = mScm.createCamera()
Local mVP:Viewport = mWin.addViewPort(mCam)
mVP.setBackgroundColour(0.3, 0.5, 0.9)
mRoot.renderOneFrame()
Delay(1000)
mRoot.Shutdown()
End If
End
Wie man sieht ist "Graphics3D" komplett entblättert und das ist gut so, denn Graphics3D soll direkt in BlitzMax/Blitz3D implementiert sein und nicht wie bisher in C. Das was man da oben sieht kann man auch aus normalen Ogre3D Tutorials ziehen, d.h. dass man auch die normalen Ogre3D Docs lesen kann um mit diesem Mod klarzukommen (wenn man denn auf diesem LowLevel Niveau arbeiten will).
Desweiteren bin ich von "GetProcAddress()" auf einen banalen "Extern" Block umgestiegen, das vereinfacht es später die Sache auf Linux und MacOS zu portieren.
Einige Dinge sind aber auch ganz anders als in Ogre3D. So erwartet die Methode Ogre::Root::createRenderWindow() eine Map mit diversen Optionen. Diese Map liesse sich zwar in BMax durch TMap simulieren aber nicht an eine C-Funktion übertragen. Deshalb habe ich entschieden dass BMax einen Pipe-separierten String schickt und C sich das dann selbst wieder auseinander pflückt.
Für alle die nicht wissen was ein(e) "Pipe" ist:
Code: [AUSKLAPPEN]
Local mySpecialWindowExtraParams:String = "title|Mein BlitzMax Ogre Window|trash|Ogre3D kennt den Parameter "trash" nicht.
Noch ein Vorteil dieser Vorgehensweise (was das LowLevel API betrifft): Ich kann die vorhandene Dokumentation fast 1:1 übernehmen wie man hier ganz gut sehen kann.
Jetzt geht es darum die API auf den Stand von 0.49.6 zu bringen und dann die Funktionen zu implementieren die auch wieder ein Graphics3D() etc. möglich machen.
stay tuned ...
mal ne halbe Nummer

Da sich mit dieser Version hauptsächlich Bugfixes einschleichen habe ich nur auf 0.49.5 erhöht. Die Klasse TOverlayImage habe ich wieder rausgeschmissen und stattdessen der Klasse TPanel ein paar neue Methoden beschert. So muss man zwar drei Schritte statt einem durchführen um ein Image als Overlay zu bekommen, aber so ist das Ganze ein wenig konsistenter geworden. Vielleicht bastle ich ja noch eine Methode die das wieder auf einen Methoden-Aufruf eindampft.
Die Overlay-Images müssen in der Reigenfolge erzeugt werden in der sie angezeigt werden sollen. Soll also der Mauszeiger über allem schweben muss er zuletzt erstellt werden, soll er aber hinter dem Logo erscheinen muss das Logo nach dem Mauszeiger erzeugt werden etc.
Eventuell habe ich auch den Bug behoben dass einigen ein MAV um die Ohren geflogen ist. Ich habe einfach mal geraten dass es an Texturen lag die nicht den Konventionen entsprechen.
Changelog:
Code: [AUSKLAPPEN]
05-21-2010 // v0.49.5
added : TVec3.toC:Byte Ptr()
added : TQuaternion.toC:Byte Ptr()
added : TPanel.setMaterial(material:String)
added : TPanel.Position(x:Float, y:Float)
added : TPanel.Align(horizontalAlign:Int, verticalAlign:Int)
added : Keycodes OKEY_W, OKEY_A, OKEY_S, OKEY_D
added : TLight.setSpotAngles(innerAngle:Float, outerAngle:Float)
added : TLight.setSpotFalloff(falloff:Float)
added : TLight.setSpotRange(range:Float)
added : TLight.lookAt(x:Float, y:Float, z:Float)
removed : TOverlayImage
Um den Vorteil der neuen Vorgehensweise zu zeigen habe ich einen Mauszeiger eingebaut der eigentlich nur ein Panel ist:
Code: [AUSKLAPPEN]
' Mousepointer
Local mouse:TPanel = TPanel.Create(0, 0, 32, 32, "mousePanel")
mouse.SetMaterial("MousePointerImage")
overlay.Add2D(mouse)
>> Download BlitzOgre3D Demo v0.49.5 (ca. 235kb) <<
Beachte: um die Demo in diesem Archiv zu starten musst Du zuerst 0.48 herunterladen, diese mit 0.49 überschreiben und dann 0.49.5 drüber bügeln! Wer mir bis hierher gefolgt ist und schon 0.49 auf der Platte hat, der muss natürlich nur 0.49.5 drüber kopieren.
have fun!
EDIT
Ich habe mal das Modul hochgeladen.
>> Download sedm.mod\blitzogre3d.mod (ca. 870kb) <<
/EDIT
Die Overlay-Images müssen in der Reigenfolge erzeugt werden in der sie angezeigt werden sollen. Soll also der Mauszeiger über allem schweben muss er zuletzt erstellt werden, soll er aber hinter dem Logo erscheinen muss das Logo nach dem Mauszeiger erzeugt werden etc.
Eventuell habe ich auch den Bug behoben dass einigen ein MAV um die Ohren geflogen ist. Ich habe einfach mal geraten dass es an Texturen lag die nicht den Konventionen entsprechen.
Changelog:
Code: [AUSKLAPPEN]
05-21-2010 // v0.49.5
added : TVec3.toC:Byte Ptr()
added : TQuaternion.toC:Byte Ptr()
added : TPanel.setMaterial(material:String)
added : TPanel.Position(x:Float, y:Float)
added : TPanel.Align(horizontalAlign:Int, verticalAlign:Int)
added : Keycodes OKEY_W, OKEY_A, OKEY_S, OKEY_D
added : TLight.setSpotAngles(innerAngle:Float, outerAngle:Float)
added : TLight.setSpotFalloff(falloff:Float)
added : TLight.setSpotRange(range:Float)
added : TLight.lookAt(x:Float, y:Float, z:Float)
removed : TOverlayImage
Um den Vorteil der neuen Vorgehensweise zu zeigen habe ich einen Mauszeiger eingebaut der eigentlich nur ein Panel ist:
Code: [AUSKLAPPEN]
' Mousepointer
Local mouse:TPanel = TPanel.Create(0, 0, 32, 32, "mousePanel")
mouse.SetMaterial("MousePointerImage")
overlay.Add2D(mouse)

>> Download BlitzOgre3D Demo v0.49.5 (ca. 235kb) <<
Beachte: um die Demo in diesem Archiv zu starten musst Du zuerst 0.48 herunterladen, diese mit 0.49 überschreiben und dann 0.49.5 drüber bügeln! Wer mir bis hierher gefolgt ist und schon 0.49 auf der Platte hat, der muss natürlich nur 0.49.5 drüber kopieren.
have fun!
EDIT
Ich habe mal das Modul hochgeladen.
>> Download sedm.mod\blitzogre3d.mod (ca. 870kb) <<
/EDIT
Catch it!

Die hier propagierte Version 0.49 bietet nur marginale Veränderungen die mich dennoch einige Stunden gekostet haben
Zunächst mal das Changelog:
Code: [AUSKLAPPEN]
05-20-2010 // v0.49
changed : clean up some things
added : TCamera.getX:Float()
added : TCamera.getY:Float()
added : TCamera.getZ:Float()
added : TCamera.getPitch:Float()
added : TCamera.getYaw:Float()
added : TCamera.getRoll:Float()
added : TMesh.getPitch:Float()
added : TMesh.getYaw:Float()
added : TMesh.getRoll:Float()
added : TLight.getX:Float()
added : TLight.getY:Float()
added : TLight.getZ:Float()
added : TLight.getPitch:Float()
added : TLight.getYaw:Float()
added : TLight.getRoll:Float()
added : TOgre.setFog(fogMode:Int, red:Float, green:Float, blue:Float, alpha:Float, expDensity:Float, linearStart:Float, linearEnd:Float)
added : TOgre.showBoundingBoxes(enable:Byte)
added : TOgreObject.getType:String()
Da ich hier im Büro nicht in der Lage bin die beschriebenen Fehler zu reproduzieren und Madame zuhause auf ihrem Rechner nichts installiert hat was mich befähigen würde Fehler auszumerzen, habe ich folgendes getan: Das Executable im nachfolgenden Päckchen öffnet nach dem Start eine Konsole und schreibt da ziemlich viel Krimskram rein, fast alles was auch die bo3d.log beinhaltet. Diejenigen bei denen es nicht funktioniert möchte ich bitten mir den Inhalt der Konsole in die Comments zu posten, so kommen wir dem Fehler schneller auf die Spur.
>> Download BlitzOgre3D Demo v0.49 (ca. 220kb) <<
Beachte: Dieses Archiv beinhaltet nur die Änderungen gegenüber der v0.48. Das heißt dass der Inhalt des Archives über den der Version 0.48 kopiert werden muss!
Nebenbei habe ich noch den Bug beseitigt dass das Logo nicht bei jedem an der selbem Stelle saß ... mit v0.49 sollte es bei jedem, egal in welcher Auflösung, rechts unten hocken.


Zunächst mal das Changelog:
Code: [AUSKLAPPEN]
05-20-2010 // v0.49
changed : clean up some things
added : TCamera.getX:Float()
added : TCamera.getY:Float()
added : TCamera.getZ:Float()
added : TCamera.getPitch:Float()
added : TCamera.getYaw:Float()
added : TCamera.getRoll:Float()
added : TMesh.getPitch:Float()
added : TMesh.getYaw:Float()
added : TMesh.getRoll:Float()
added : TLight.getX:Float()
added : TLight.getY:Float()
added : TLight.getZ:Float()
added : TLight.getPitch:Float()
added : TLight.getYaw:Float()
added : TLight.getRoll:Float()
added : TOgre.setFog(fogMode:Int, red:Float, green:Float, blue:Float, alpha:Float, expDensity:Float, linearStart:Float, linearEnd:Float)
added : TOgre.showBoundingBoxes(enable:Byte)
added : TOgreObject.getType:String()
Da ich hier im Büro nicht in der Lage bin die beschriebenen Fehler zu reproduzieren und Madame zuhause auf ihrem Rechner nichts installiert hat was mich befähigen würde Fehler auszumerzen, habe ich folgendes getan: Das Executable im nachfolgenden Päckchen öffnet nach dem Start eine Konsole und schreibt da ziemlich viel Krimskram rein, fast alles was auch die bo3d.log beinhaltet. Diejenigen bei denen es nicht funktioniert möchte ich bitten mir den Inhalt der Konsole in die Comments zu posten, so kommen wir dem Fehler schneller auf die Spur.
>> Download BlitzOgre3D Demo v0.49 (ca. 220kb) <<
Beachte: Dieses Archiv beinhaltet nur die Änderungen gegenüber der v0.48. Das heißt dass der Inhalt des Archives über den der Version 0.48 kopiert werden muss!
Nebenbei habe ich noch den Bug beseitigt dass das Logo nicht bei jedem an der selbem Stelle saß ... mit v0.49 sollte es bei jedem, egal in welcher Auflösung, rechts unten hocken.
Mal was zum gucken...

BlitzOgre3D v0.48
Wie man sehen kann habe ich auf die Husche noch Schatten eingebaut (leider funktionieren derzeit nur die Stencilbuffer Types, warum das so ist muss ich noch ergründen) und man kann deutlich erkennen dass ich Kisten mag
Das Overlay-Image wird aus einer Kombination von Overlay- und Material-Script geladen. Im Folgenden mal die beiden Scripts die erforderlich sind um das Image zu definieren:
Das Overlay-Script:
Code: [AUSKLAPPEN]
boLogo
{
zorder 1000
container Panel(boLogo)
{
metrics_mode pixels
top 10
left 744
width 250
height 81
border_size 0.0
material boLogoImage
}
}
Das Material-Script:
Code: [AUSKLAPPEN]
material boLogoImage
{
technique
{
pass
{
lighting off
scene_blend alpha_blend
depth_check off
texture_unit
{
texture logo.png
}
}
}
}
Der Aufruf in BlitzMax:
Code: [AUSKLAPPEN]
Local img:TOverlayImage = TOverlayImage.showByMaterial("boLogo")
Danach muss man sich nicht mehr um das Image kümmern, Ogre3D weiß allein dass man es permanent auf dem Screen haben will. Logischerweise ist das noch extrem ausbaufähig, gerade in Hinblick auf die Möglichkeit diese Dinge auch ohne Script "hard-zu-coden".
Noch das Changelog:
Code: [AUSKLAPPEN]
05-19-2010 // v0.48
changed : Overlay methods does not longer need the parameter "ogre:TOgre"
added : TOgre.SetShadowTechnique(technique:Int)
added : TMesh.CastShadows(enable:Byte)
added : TOverlayImage
added : TOverlayImage.showByMaterial(material:String)
removed : TBullet.setTimeStep() ' is now be calculated internally
removed : TBullet.setFixedTimeStep() ' is now be calculated internally
Das komplette Changelog liegt dem nachfolgenden Päckchen bei.
>> Download BlitzOgre3D 0.48 Demo (ca. 5,4MB) <<
In diesem Paket befindet sich diesmal kein Source und kein Modul, das gibt es wieder wenn Blitz3D auf demselben Stand wie die BlitzMax Version ist. Ich habe auch ein wenig im DLL-Dschungel aufgeräumt. Wenn bei jemandem angesagt wird dass die cg.dll fehlt kann er sich diese hier herunterladen.
So ... dann baue ich mal weiter, liegen ja noch ein paar Mannjahre Arbeit vor mir

Wie man sehen kann habe ich auf die Husche noch Schatten eingebaut (leider funktionieren derzeit nur die Stencilbuffer Types, warum das so ist muss ich noch ergründen) und man kann deutlich erkennen dass ich Kisten mag

Das Overlay-Image wird aus einer Kombination von Overlay- und Material-Script geladen. Im Folgenden mal die beiden Scripts die erforderlich sind um das Image zu definieren:
Das Overlay-Script:
Code: [AUSKLAPPEN]
boLogo
{
zorder 1000
container Panel(boLogo)
{
metrics_mode pixels
top 10
left 744
width 250
height 81
border_size 0.0
material boLogoImage
}
}
Das Material-Script:
Code: [AUSKLAPPEN]
material boLogoImage
{
technique
{
pass
{
lighting off
scene_blend alpha_blend
depth_check off
texture_unit
{
texture logo.png
}
}
}
}
Der Aufruf in BlitzMax:
Code: [AUSKLAPPEN]
Local img:TOverlayImage = TOverlayImage.showByMaterial("boLogo")
Danach muss man sich nicht mehr um das Image kümmern, Ogre3D weiß allein dass man es permanent auf dem Screen haben will. Logischerweise ist das noch extrem ausbaufähig, gerade in Hinblick auf die Möglichkeit diese Dinge auch ohne Script "hard-zu-coden".
Noch das Changelog:
Code: [AUSKLAPPEN]
05-19-2010 // v0.48
changed : Overlay methods does not longer need the parameter "ogre:TOgre"
added : TOgre.SetShadowTechnique(technique:Int)
added : TMesh.CastShadows(enable:Byte)
added : TOverlayImage
added : TOverlayImage.showByMaterial(material:String)
removed : TBullet.setTimeStep() ' is now be calculated internally
removed : TBullet.setFixedTimeStep() ' is now be calculated internally
Das komplette Changelog liegt dem nachfolgenden Päckchen bei.
>> Download BlitzOgre3D 0.48 Demo (ca. 5,4MB) <<
In diesem Paket befindet sich diesmal kein Source und kein Modul, das gibt es wieder wenn Blitz3D auf demselben Stand wie die BlitzMax Version ist. Ich habe auch ein wenig im DLL-Dschungel aufgeräumt. Wenn bei jemandem angesagt wird dass die cg.dll fehlt kann er sich diese hier herunterladen.
So ... dann baue ich mal weiter, liegen ja noch ein paar Mannjahre Arbeit vor mir

Es kollidiert

Ich konnte heute erfolgreich den OgreHead, dank Bullet, auf eine ziemlich hässliche Plane fallen lassen ... sobald TMesh.Copy() funktioniert gibbet eine neue Demo ... ich denke das wird morgen sein.
Changelog:
Code: [AUSKLAPPEN]
05-18-2010 // v0.47
added : TPhysicsObject
added : TPhysicsObject.getCollisionShapePtr:Byte Ptr()
added : TPhysicsObject.getRigidBodyPtr:Byte Ptr()
added : TPhysicsObject.getMotionStatePtr:Byte Ptr()
added : TOgreObject._hasPhysics:TPhysicsObject
added : TMesh.isPhysicsObject:Byte()
added : TMesh.UpdateTransformation()
added : TMesh.Width:Float()
added : TMesh.Height:Float()
added : TMesh.Depth:Float()
added : TMesh.Radius:Float()
added : Vec3:TVec3(x:Float, y:Float, z:Float)
added : Quaternion:TQuaternion(x:Float, y:Float, z:Float, w:Float)
added : TMesh.getScaleX:Float()
added : TMesh.getScaleY:Float()
added : TMesh.getScaleZ:Float()
added : TBullet.CreateDynamic(mesh:TMesh, colShapeType:Int, mass:Float, centerOfMass:TVec3)
fixed : TMesh.Width(), TMesh.Height() and TMesh.Depth() now return the correct scaling
Changelog:
Code: [AUSKLAPPEN]
05-18-2010 // v0.47
added : TPhysicsObject
added : TPhysicsObject.getCollisionShapePtr:Byte Ptr()
added : TPhysicsObject.getRigidBodyPtr:Byte Ptr()
added : TPhysicsObject.getMotionStatePtr:Byte Ptr()
added : TOgreObject._hasPhysics:TPhysicsObject
added : TMesh.isPhysicsObject:Byte()
added : TMesh.UpdateTransformation()
added : TMesh.Width:Float()
added : TMesh.Height:Float()
added : TMesh.Depth:Float()
added : TMesh.Radius:Float()
added : Vec3:TVec3(x:Float, y:Float, z:Float)
added : Quaternion:TQuaternion(x:Float, y:Float, z:Float, w:Float)
added : TMesh.getScaleX:Float()
added : TMesh.getScaleY:Float()
added : TMesh.getScaleZ:Float()
added : TBullet.CreateDynamic(mesh:TMesh, colShapeType:Int, mass:Float, centerOfMass:TVec3)
fixed : TMesh.Width(), TMesh.Height() and TMesh.Depth() now return the correct scaling
Bullets are in da House!

Nur damit niemand denkt hier passiert nix mehr, poste ich mal eben das Changelog.
Code: [AUSKLAPPEN]
05-17-2010 // v0.46
changed : redesign of the class-tree
added : TVec3
added : TVec3.Set:TVec3(x:Float, y:Float, z:Float)
added : TQuarternion
added : TQuarternion.Set(x:Float, y:Float, z:Float, w:Float)
added : TCollisionShape
added : TCollisionShape.CreatePlane(planeNormal:TVec3, scalar:Float)
added : TCollisionShape.CreateBox(halfExtends:TVec3)
added : TCollisionShape.CreateSphere(radius:Float)
added : TCollisionShape.CreateCylinder(halfExtends:TVec3)
added : TCollisionShape.CreateCapsule(radius:Float, height:Float)
added : TCollisionShape.CreateCone(radius:Float, height:Float)
added : TCollisionShape.Destroy()
added : TBullet
added : TBullet.Init(gravity:TVec3)
added : TBullet.Destroy()
added : TBullet.CreatePlane:TCollisionShape(planeNormal:TVec3, scalar:Float)
added : TBullet.CreateBox:TCollisionShape(halfExtends:TVec3)
added : TBullet.CreateSphere:TCollisionShape(radius:Float)
added : TBullet.CreateCylinder:TCollisionShape(halfExtends:TVec3)
added : TBullet.CreateCapsule:TCollisionShape(radius:Float, height:Float)
added : TBullet.CreateCone:TCollisionShape(radius:Float, height:Float)
added : TOgre.InitBulletPhysics:TBullet(gravity:TVec3)
added : TOgre.DestroyBulletPhysics(bullet:TBullet)
added : TMotionState
added : TMotionState.Create(q:TQuarternion, v:TVec3)
added : TMotionState.Destroy()
added : TBullet.CreateMotionState:TMotionState(q:TQuarternion, v:TVec3)
added : TRigidBody
added : TRigidBody.Create(shape:TCollisionShape, motionState:TMotionState, mass:Float, centerOfMass:TVec3)
added : TRigidBody.Destroy()
added : TBullet.CreateDefaultMotionState:TMotionState(q:TQuarternion, v:TVec3)
added : TBullet.CreateRigidBody:TRigidBody(shape:TCollisionShape, motionstate:TMotionState, mass:Float, centerOfMass:TVec3)
added : TRigidBody.add()
added : TRigidBody.remove()
added : TBullet.setTimeStep(timeStep:Float)
added : TBullet.setMaxSubSteps(maxSubSteps:Int)
added : TBullet.setFixedTimeStep(fixedTimeStep:Float)
added : TOgre.UpdateWorld()
added : TCompositor
added : TCompositor.Create:TCompositor()
added : HardwareBuffers
added : TexturePixelFormats
added : TTexture
added : TTexture.Create:TTexture(width:Int, Height:Int, texture_name:String, texture_type:Int, num_mips:Int, pixelformat:Int, use_as:Int)
added : TTexture.Free()
Morgen habe ich Bullet soweit durchgeschliffen dass man Objekte rumschubsen kann ... stay tuned.
Code: [AUSKLAPPEN]
05-17-2010 // v0.46
changed : redesign of the class-tree
added : TVec3
added : TVec3.Set:TVec3(x:Float, y:Float, z:Float)
added : TQuarternion
added : TQuarternion.Set(x:Float, y:Float, z:Float, w:Float)
added : TCollisionShape
added : TCollisionShape.CreatePlane(planeNormal:TVec3, scalar:Float)
added : TCollisionShape.CreateBox(halfExtends:TVec3)
added : TCollisionShape.CreateSphere(radius:Float)
added : TCollisionShape.CreateCylinder(halfExtends:TVec3)
added : TCollisionShape.CreateCapsule(radius:Float, height:Float)
added : TCollisionShape.CreateCone(radius:Float, height:Float)
added : TCollisionShape.Destroy()
added : TBullet
added : TBullet.Init(gravity:TVec3)
added : TBullet.Destroy()
added : TBullet.CreatePlane:TCollisionShape(planeNormal:TVec3, scalar:Float)
added : TBullet.CreateBox:TCollisionShape(halfExtends:TVec3)
added : TBullet.CreateSphere:TCollisionShape(radius:Float)
added : TBullet.CreateCylinder:TCollisionShape(halfExtends:TVec3)
added : TBullet.CreateCapsule:TCollisionShape(radius:Float, height:Float)
added : TBullet.CreateCone:TCollisionShape(radius:Float, height:Float)
added : TOgre.InitBulletPhysics:TBullet(gravity:TVec3)
added : TOgre.DestroyBulletPhysics(bullet:TBullet)
added : TMotionState
added : TMotionState.Create(q:TQuarternion, v:TVec3)
added : TMotionState.Destroy()
added : TBullet.CreateMotionState:TMotionState(q:TQuarternion, v:TVec3)
added : TRigidBody
added : TRigidBody.Create(shape:TCollisionShape, motionState:TMotionState, mass:Float, centerOfMass:TVec3)
added : TRigidBody.Destroy()
added : TBullet.CreateDefaultMotionState:TMotionState(q:TQuarternion, v:TVec3)
added : TBullet.CreateRigidBody:TRigidBody(shape:TCollisionShape, motionstate:TMotionState, mass:Float, centerOfMass:TVec3)
added : TRigidBody.add()
added : TRigidBody.remove()
added : TBullet.setTimeStep(timeStep:Float)
added : TBullet.setMaxSubSteps(maxSubSteps:Int)
added : TBullet.setFixedTimeStep(fixedTimeStep:Float)
added : TOgre.UpdateWorld()
added : TCompositor
added : TCompositor.Create:TCompositor()
added : HardwareBuffers
added : TexturePixelFormats
added : TTexture
added : TTexture.Create:TTexture(width:Int, Height:Int, texture_name:String, texture_type:Int, num_mips:Int, pixelformat:Int, use_as:Int)
added : TTexture.Free()
Morgen habe ich Bullet soweit durchgeschliffen dass man Objekte rumschubsen kann ... stay tuned.
Texturen und Compositoren

Heute habe ich an zwei Fronten gekämpft. Die eine befand sich auf der Texturseite und die andere auf dem Gebiet der sogenannten Compositoren. Letztere sind einfache Scripts die es einem Ogre3D Jünger gestatten den PostProcess Bereich relativ frei zu gestalten. Ich gedenke diverse Compositor-Scripts mit BlitzOgre3D direkt zu definieren so dass man diese Effekte mit einem einfachen Aufruf nutzen kann (bspw. "Depth of Field", "Bloom", "Motion Blur" etc.)
Mit der Einbindung von Compositors und den Texture-Befehlen gehe ich auch einen Schritt davon weg jede Blitz3D Funktion direkt in C++ zu wrappen. Stattdessen schleife ich die benötigten Ogre3D Methoden durch und klebe das dann in BMax und Blitz3D zusammen.
Texturen sind in ihrem Ogre3D Format etwas komplizierter zu erstellen als man das in Blitz3D mit seinem banalen "CreateTexture()" gewohnt ist, aber man hat auch wesentlich mehr Möglichkeiten. Nutzt man CreateTexture() nur mit den erforderlichen Parametern "width" und "height" bekommt man halt eine 32 Bit Textur mit den Eigenschaften RGB und Alpha. MIt Blick auf die Portierung des Wrappers auf Mac und Linux (BMax) habe ich aber auch alle anderen Formate durchgeschliffen. Diese kann man sich in der Datei "include/bo_texture_pixelformats.bmx" genauer ansehen. In dieser Datei sind auch noch diverse Möglichkeiten definiert die Textur des Vertrauens zu nutzen (bspw. als RenderTarget) sowie den Typ der Textur zu bestimmen, was für Shader nicht unbedingt uninteressant ist (1D, 2D, 3D, CubeMap Texure).
Compositors sind Ogre3D Scripts die ein klein wenig den GLSL oder HLSL Scripts vorgreifen und PostProcess Effekte ermöglichen. In BlitzOgre3D schleife ich alle Methoden durch die man benötigt um direkt die Dokumentation und/oder die Tutorials nachvollziehen zu können, fasse aber die wichtigsten Effekte in eigenen Methoden/Funktionen zusammen. Beispielsweise erledigt ein "SceneDOF(camera, near, far)" den kompletten Ablauf eines Depth of Field, wer möchte darf das dann aber direkt wie in Ogre3D selbst tun.
Mit dem nächsten Release (0.48) wird das dann möglich sein.
Mit der Einbindung von Compositors und den Texture-Befehlen gehe ich auch einen Schritt davon weg jede Blitz3D Funktion direkt in C++ zu wrappen. Stattdessen schleife ich die benötigten Ogre3D Methoden durch und klebe das dann in BMax und Blitz3D zusammen.
Texturen sind in ihrem Ogre3D Format etwas komplizierter zu erstellen als man das in Blitz3D mit seinem banalen "CreateTexture()" gewohnt ist, aber man hat auch wesentlich mehr Möglichkeiten. Nutzt man CreateTexture() nur mit den erforderlichen Parametern "width" und "height" bekommt man halt eine 32 Bit Textur mit den Eigenschaften RGB und Alpha. MIt Blick auf die Portierung des Wrappers auf Mac und Linux (BMax) habe ich aber auch alle anderen Formate durchgeschliffen. Diese kann man sich in der Datei "include/bo_texture_pixelformats.bmx" genauer ansehen. In dieser Datei sind auch noch diverse Möglichkeiten definiert die Textur des Vertrauens zu nutzen (bspw. als RenderTarget) sowie den Typ der Textur zu bestimmen, was für Shader nicht unbedingt uninteressant ist (1D, 2D, 3D, CubeMap Texure).
Compositors sind Ogre3D Scripts die ein klein wenig den GLSL oder HLSL Scripts vorgreifen und PostProcess Effekte ermöglichen. In BlitzOgre3D schleife ich alle Methoden durch die man benötigt um direkt die Dokumentation und/oder die Tutorials nachvollziehen zu können, fasse aber die wichtigsten Effekte in eigenen Methoden/Funktionen zusammen. Beispielsweise erledigt ein "SceneDOF(camera, near, far)" den kompletten Ablauf eines Depth of Field, wer möchte darf das dann aber direkt wie in Ogre3D selbst tun.
Mit dem nächsten Release (0.48) wird das dann möglich sein.
Eltern mal kompliziert

Es war ein Heidenaufwand so einfache (aber wichtige) Sachen wie EntityParent() zu realisieren. Das funktioniert jetzt und das ist gut so.
Derweil habe ich das gesamte BMax Konstrukt umgeschrieben da es dort einige Fallstricke gab die ich bei meinem ersten drauf los rennen garnicht bedacht hatte.
Alle Objekte stammen nun von TOgreObject ab und implementieren die meisten Funktionen selbst. In der letzten Version erbte noch jede Klasse von TEntity, was aber einige Fehler mit sich brachte die in C++ so nicht aufgetreten wären weil man dort eine Funktion komplett überschreiben kann, während BlitzMax da noch einige Anforderungen hat (bspw. die Anzahl der Parameter).
Eine weitere Änderung ist dass man den InputHandler nicht mehr selbst erstellen muss, dies passiert bereits beim Initialisieren der Engine. Ein Handle auf den InputHandler bekommt man per TOgre::getInputHandler().
Eine weitere Änderung ist dass viele Translations-Funktionen nun den zusätzlichen Parameter "relativeTo" besitzen mittels dem man definieren kann in welcher Relation die Translation passieren soll: Lokal, relativ zum Parent oder relativ zu den Weltkoordinaten (TS_LOCAL, TS_PARENT, TS_WORLD).
Als letztes ein, wie ich finde sehr wichtiges, Feature sei genannt dass die Engine nun auf StdOut Exceptions der Ogre3D Engine meldet. Noch nicht auf alle Funktionen aber ich bin bemüht in jede Funktion ein "try...catch()" einzubauen. Leider gibt es in Blitz3D keine Möglichkeit diese wichtigen Ausgaben abzufangen, vielleicht baue ich da noch was ein dass der Krimskram in eine Datei ausgegeben wird.
Das war es erstmal, ohne Release, für diesen Status-Bericht. Ansonsten will ich nur noch verkünden: Wenn die "Bird Demo" aus dem Blitz3D Paket ohne großartige Änderungen übersetzt werden kann, ist Ogre3D für Blitz3D in der Beta ... die BlitzMax Version ist dann ebensoweit, aber das Birdie-Demo wird nicht laufen
Derweil habe ich das gesamte BMax Konstrukt umgeschrieben da es dort einige Fallstricke gab die ich bei meinem ersten drauf los rennen garnicht bedacht hatte.
Alle Objekte stammen nun von TOgreObject ab und implementieren die meisten Funktionen selbst. In der letzten Version erbte noch jede Klasse von TEntity, was aber einige Fehler mit sich brachte die in C++ so nicht aufgetreten wären weil man dort eine Funktion komplett überschreiben kann, während BlitzMax da noch einige Anforderungen hat (bspw. die Anzahl der Parameter).
Eine weitere Änderung ist dass man den InputHandler nicht mehr selbst erstellen muss, dies passiert bereits beim Initialisieren der Engine. Ein Handle auf den InputHandler bekommt man per TOgre::getInputHandler().
Eine weitere Änderung ist dass viele Translations-Funktionen nun den zusätzlichen Parameter "relativeTo" besitzen mittels dem man definieren kann in welcher Relation die Translation passieren soll: Lokal, relativ zum Parent oder relativ zu den Weltkoordinaten (TS_LOCAL, TS_PARENT, TS_WORLD).
Als letztes ein, wie ich finde sehr wichtiges, Feature sei genannt dass die Engine nun auf StdOut Exceptions der Ogre3D Engine meldet. Noch nicht auf alle Funktionen aber ich bin bemüht in jede Funktion ein "try...catch()" einzubauen. Leider gibt es in Blitz3D keine Möglichkeit diese wichtigen Ausgaben abzufangen, vielleicht baue ich da noch was ein dass der Krimskram in eine Datei ausgegeben wird.
Das war es erstmal, ohne Release, für diesen Status-Bericht. Ansonsten will ich nur noch verkünden: Wenn die "Bird Demo" aus dem Blitz3D Paket ohne großartige Änderungen übersetzt werden kann, ist Ogre3D für Blitz3D in der Beta ... die BlitzMax Version ist dann ebensoweit, aber das Birdie-Demo wird nicht laufen

0.45 BlitzMax, Blitz3D und BlitzPlus

Wieder hat sich an der Oberfläche nur wenig verändert, das Meiste ist intern passiert. Das Blöde an Ogre3D ist, dass es so inkonsistent ist. Während ich für den einen Objekttyp direkt auf Methoden wie Pitch(), Yaw(), Roll() etc. zurück greifen kann, ist es bei anderen Objekten wesentlich komplizierter sie zu drehen obwohl alle betroffenen Typen von ein und derselben Klasse abstammen. Dazu kommt noch dass ich nicht bei jeder Methode die ein Objekt dreht definieren kann ob die Drehung im lokalen Raum, im globalen Raum oder relativ zum Parent passiert.
In 0.45 ist das positionieren und drehen von Pivots eingebaut was aber noch einige Bugs enthält die teilweise mit EntityParent() zusammen hängen. Im Example ist eine einfache FPS Camera eingebaut die leider auch noch nicht so arbeitet wie ich das gern hätte ... aber oberflächlich funktioniert es schonmal.
Weiterhin hinzugekommen ist für beide Versionen die Funktion/Methode "SetLogLevel()". Über diese kann bestimmt werden wie umfangreich die Log-Messages der Engine sind. Mögliche Werte für den Parameter sind LL_LOW, LL_NORMAL, LL_HIGH. Voreingestellt ist LL_LOW. SetLogLevel() muss vor Graphics3D aufgerufen werden wenn man es nutzen möchte.
Das Changelog für 0.45 BlitzMax
Code: [AUSKLAPPEN]
05-11-2010 // v0.45
added : TInput.MouseZSpeed:Int()
added : TOgre.SetLogLevel(loglevel:Int)
added : TPivot.Create:TPivot(ogre:TOgre, entity_name:String)
added : TPivot.Turn(x:Float, y:Float, z:Float)
added : TPivot.Position(x:Float, y:Float, z:Float)
added : TPivot.Move(x:Float, y:Float, z:Float)
added : TPivot.Rotate(x:Float, y:Float, z:Float)
added : TPivot.getPitch:Float()
added : TPivot.getYaw:Float()
added : TPivot.getRoll:Float()
05-10-2010 // v0.44.1
added : TOgre.getFPS:Float(value:Int)
Das Changelog für 0.45 Blitz3D/BlitzPlus
Code: [AUSKLAPPEN]
05-11-2010 // v0.45
added : MouseZSpeed%()
added : SetLogLevel(loglevel%)
added : Turn, Rotate, Move and Position for Pivots
05-10-2010 // v0.44.1
added : GetFPS#(value%)
>> Download BlitzOgre3D v0.45 für Blitz3D/BlitzPlus (ca. 690kb) <<
>> Download BlitzOgre3D v0.45 für BlitzMax (ca. 196kb) <<
Wichtig!
Dies ist ein Update für die Version 0.44. Das heißt dass zuerst 0.44 installiert und dann 0.45 darüber kopiert werden muss.
In 0.45 ist das positionieren und drehen von Pivots eingebaut was aber noch einige Bugs enthält die teilweise mit EntityParent() zusammen hängen. Im Example ist eine einfache FPS Camera eingebaut die leider auch noch nicht so arbeitet wie ich das gern hätte ... aber oberflächlich funktioniert es schonmal.
Weiterhin hinzugekommen ist für beide Versionen die Funktion/Methode "SetLogLevel()". Über diese kann bestimmt werden wie umfangreich die Log-Messages der Engine sind. Mögliche Werte für den Parameter sind LL_LOW, LL_NORMAL, LL_HIGH. Voreingestellt ist LL_LOW. SetLogLevel() muss vor Graphics3D aufgerufen werden wenn man es nutzen möchte.
Das Changelog für 0.45 BlitzMax
Code: [AUSKLAPPEN]
05-11-2010 // v0.45
added : TInput.MouseZSpeed:Int()
added : TOgre.SetLogLevel(loglevel:Int)
added : TPivot.Create:TPivot(ogre:TOgre, entity_name:String)
added : TPivot.Turn(x:Float, y:Float, z:Float)
added : TPivot.Position(x:Float, y:Float, z:Float)
added : TPivot.Move(x:Float, y:Float, z:Float)
added : TPivot.Rotate(x:Float, y:Float, z:Float)
added : TPivot.getPitch:Float()
added : TPivot.getYaw:Float()
added : TPivot.getRoll:Float()
05-10-2010 // v0.44.1
added : TOgre.getFPS:Float(value:Int)
Das Changelog für 0.45 Blitz3D/BlitzPlus
Code: [AUSKLAPPEN]
05-11-2010 // v0.45
added : MouseZSpeed%()
added : SetLogLevel(loglevel%)
added : Turn, Rotate, Move and Position for Pivots
05-10-2010 // v0.44.1
added : GetFPS#(value%)

>> Download BlitzOgre3D v0.45 für Blitz3D/BlitzPlus (ca. 690kb) <<
>> Download BlitzOgre3D v0.45 für BlitzMax (ca. 196kb) <<
Wichtig!
Dies ist ein Update für die Version 0.44. Das heißt dass zuerst 0.44 installiert und dann 0.45 darüber kopiert werden muss.
Gehe zu Seite Zurück 1, 2, 3 ... 6, 7, 8 ... 13, 14, 15 Weiter