simpleOgre - Ogre3D für Blitz3D

Übersicht Sonstiges Projekte

Neue Antwort erstellen

Farbfinsternis

Betreff: simpleOgre - Ogre3D für Blitz3D

BeitragMo, Apr 26, 2010 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Dieser Thread soll den Fortschritt von simpleOgre dokumentieren welches aus simple3D hervor gegangen ist welches noch auf Irrlicht basierte.

Frech wie ich bin kopiere ich zum Start ersmo nur den Link zum Worklog hier rein. Weitere Updates werden dann gleich behandelt.

simpleOgre Worklog

Der letzte Eintrag zum mit Ohne klicken
Ich verlinke hier das Archiv, es sollte aber wirklich nur von Usern verwendet werden die nicht eben gerade Blitz3D von einem russischen Server gezogen haben!

simpleOgre V0.1 (ca. 3,5MB)

Enthalten sind:

  • Includes "ogre_keycodes.bb" und "simpleOgre.bb"
  • Plugins, DLLs und Configs für Ogre und OIS
  • simpleOgre_Example.bb
  • simpleOgre.decls
  • gaaanz viel Liebe zum Produkt


Nochmal für die Legastheniker : Um dieses Päckchen schon jetzt auszuprobieren musst Du folgendes wissen und können:

  • Du musst wissen wie man ein Include in den eigenen Source einbindet
  • Du musst wissen wo man eine DECLS platziert
  • Du musst wissen wo die DLLs hinkommen
  • Du musst wissen wie man ein Executable erzeugt denn nur diese funktionieren mit simpleOgre, der Blitz3D Compiler mag zur Laufzeit in der IDE gar kein Ogre haben ... muss wohl sowas wie Fremdenhass sein.
  • Du darfst keine Angst vor einem MemLeak haben denn simpleOgre hat vermutlich ein dutzend davon in der Jackentasche


Wenn Du obige Liste komplett knickst weil Du ein alter Hase bist, kannst Du Dich schon jetzt auf eine super Lib freuen denn simpleOgre hat zwei Zweige:

1. Zweig: Es gibt alles was Blitz3D kann + Echtzeit-Schatten
2. Zweig: Es gibt alles was Ogre kann, aber ein bisschen komplizierter und aufwändiger.
Farbfinsternis.tv
  • Zuletzt bearbeitet von Farbfinsternis am Do, Apr 29, 2010 19:00, insgesamt einmal bearbeitet

Farbfinsternis

Betreff: V0.2

BeitragMi, Apr 28, 2010 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Es hat sich wieder ein klein wenig getan...

Was geht...

  • Graphics3D() ; noch ohne Parameter da das OgreConfig Tool verwendet wird
  • EndGraphics3D() ; ganz wichtig! Immer am Ende aufrufen!
  • RenderWorld() ; Zeit seit letztem Update schon als Parameter vorhanden, aber noch nicht implementiert
  • CreateCamera()
  • CameraClsColor()
  • PositionEntity()
  • MoveEntity()
  • TurnEntity()
  • CreateLight()
  • LightColor()
  • AmbientLight()
  • LoadMesh() ; Achtung! Ogre3D kennt kein *.b3d, Meshes müssen als *.mesh vorliegen
  • KeyDown()
  • KeyHit()


Leider kann man Ogre-Programme noch immer nicht aus der IDE starten und ich habe keinen Anhaltspunkt woran das liegt. Aber zumindest konnte ich einige MemLeaks entfernen und das Ganze ein wenig ausbauen.

user posted image

Hier noch der Download Link für 0.2
simpleOgre 0.2 (ca. 5MB)

Eine ausführbare Datei liegt bei. Es kann sein dass wegen einer DLL gemeckert wird, schreibt dann einfach hier rein welche das ist und ich lege sie bei.

In Blitz3D sieht das Ganze dann so aus:

BlitzBasic: [AUSKLAPPEN]

Include "ogre\simpleOgre.bb"

If Graphics3D()
cam.Obj = CreateCamera()
CameraClsColor(cam, 0.1, 0.3, 0.7)
PositionEntity(cam, 0.0, 0.0, 160.0)

AmbientLight(0.4, 0.4, 0.4)
light.Obj = CreateLight()
PositionEntity(light, -1600, 1600, 1600)
LightColor(light, 255, 255, 0)

mesh.Obj = LoadMesh("media\ogrehead.mesh")

exit_flag% = False
Repeat
If KeyDown(1) Then exit_flag = True

If KeyDown(200) Then MoveEntity(cam, 0, 0, -0.01)
If KeyDown(208) Then MoveEntity(cam, 0, 0, 0.01)
If KeyDown(203) Then MoveEntity(cam, -0.01, 0, 0)
If KeyDown(205) Then MoveEntity(cam, 0.01, 0, 0)

TurnEntity(mesh, 0.0, 0.0001, 0.0)

RenderWorld()
Until exit_flag% = True
EndIf

EndGraphics()

End


Alle "Create..." Funktionen geben ein Objekt vom Typ "Obj" zurück, wer versucht das wie im original Blitz3D als Integer zu handlen fällt auf die Nase!

Es funktionieren nur die hier aufgelisteten Funktionen, Blitz3D ist mit seinen Grafikmöglichkeiten völlig aussen vor!
Farbfinsternis.tv

Farbfinsternis

BeitragDo, Apr 29, 2010 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Heute stand ein bisschen Bugfixing und Optimierung auf dem Plan, außerdem sind eine handvoll Funktionen dazugekommen.

Das Changelog (jetzt ganz frisch eingeführt):
Zitat:

V0.3 29.04.2010

hinzugefügt : WBuffer(enable%)
hinzugefügt : Dither(enable%)
hinzugefügt : AntiAlias(value%)
hinzugefügt : WireFrame(cam.Obj, enable%)
hinzugefügt : HWMultiTex(enable%)
hinzugefügt : CameraProjMode(cam.Obj, mode%)
hinzugefügt : CameraRange(cam.Obj, near#, far#)
hinzugefügt : DebugLog(message$)


V0.2 28.04.2010
hinzugefügt : Graphics3D()
hinzugefügt : EndGraphics3D()
hinzugefügt : RenderWorld()
hinzugefügt : CreateCamera()
hinzugefügt : CameraClsColor()
hinzugefügt : PositionEntity()
hinzugefügt : MoveEntity()
hinzugefügt : TurnEntity()
hinzugefügt : CreateLight()
hinzugefügt : LightColor()
hinzugefügt : AmbientLight()
hinzugefügt : LoadMesh()
hinzugefügt : KeyDown()
hinzugefügt : KeyHit()


Ein paar Bemerkungen zu den Funktionen:

Dither()
Soetwas gibt es im Jahr 2010 nicht mehr und in Ogre schon garnicht. Wer meint er müsse mit 16Bit Screens hantieren sollte von modernen 3D Engines die Finger lassen.
Ich habe die Funktion dennoch überschrieben damit der YAN sich nicht über Fehlermeldungen wundert. Das werde ich übrigens mit allen Blitz3D Funktionen tun die in Ogre keine Funktion mehr haben.

AntiAlias()
Im Gegensatz zu Blitz3D gibt man hier nicht an ob man FSAA nutzen will oder nicht, sondern wie stark das FSAA eingesetzt werden soll (0, 2, 4, 8 etc.). Hierbei ist zu beachten dass das nicht zur Laufzeit umgesetzt wird sondern erst nach dem nächsten Start der App zur Verfügung steht

HWMultiTex()
Siehe Dither()

CameraProjMode()
Funktioniert schon, sieht aber noch nicht so aus wie in Blitz3D und die Mode 0 existiert nicht.
Dass es nicht so aussieht wie in Blitz3D liegt nicht daran dass der orthographische Modus nicht orthographisch ist, sondern daran dass Mark da ein bisschen getrickst hat damit der User nach dem Umschalten die Scene im Selben Zoom sieht wie in der Perspektive. Das tweake ich aber noch damit das mit Ogre genauso funktioniert.
Mode 0 ist mir nicht ganz geheuer. In Blitz3D ist es die schnellere Möglichkeit eine Camera zu "verstecken", in Ogre ist "Kamera verstecken" immer schnell. Wahrscheinlich werde ich bei Mode 0 einfach HideEntity() aufrufen ... mal gucken.

DebugLog()
Da simpleOgre noch immer nicht aus der IDE gestartet werden kann (warum auch immer, ich habe keinen blassen Schimmer) habe ich DebugLog() überschrieben. Die Funktion schreibt seine Ausgaben in die datei "s3d.log"

Jetzt noch der Code des aktuellen Examples und danach der Download-Link für die V0.3 (ein Executable liegt bei)
BlitzBasic: [AUSKLAPPEN]

Include "ogre\simpleOgre.bb"


If Graphics3D()
cam.Obj = CreateCamera()
CameraClsColor(cam, 0.1, 0.3, 0.7)
PositionEntity(cam, 0.0, 0.0, 160.0)
CameraRange(cam, 0.1, 600)

AmbientLight(0.4, 0.4, 0.4)
light.Obj = CreateLight()
PositionEntity(light, -1600, 1600, 1600)
LightColor(light, 255, 255, 0)

mesh.Obj = LoadMesh("media\robot.mesh")
PositionEntity(mesh, 0.0, -60, 0.0)

wf% = 0
exit_flag% = False
Repeat
If KeyDown(1) Then exit_flag = True

If KeyDown(200) Then MoveEntity(cam, 0, 0, -0.01)
If KeyDown(208) Then MoveEntity(cam, 0, 0, 0.01)
If KeyDown(203) Then MoveEntity(cam, -0.01, 0, 0)
If KeyDown(205) Then MoveEntity(cam, 0.01, 0, 0)

If KeyHit(17) Then WireFrame(cam, wf) : wf = 1 - wf : DebugLog "Sende " + wf
If KeyHit(25) Then CameraProjMode(cam, 1)
If KeyHit(24) Then CameraProjMode(cam, 2)
TurnEntity(mesh, 0.0, 0.0001, 0.0)

RenderWorld()
Until exit_flag% = True

EndGraphics()
EndIf

End


>> Download simpleOgre 0.3 (ca. 5,5MB) <<
Farbfinsternis.tv

skey-z

BeitragDo, Apr 29, 2010 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe es gerade mal probiert, auch die Exe kann ich nciht ausführen, er meldet, dass er die DX9....dll nicht finden konnte
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Farbfinsternis

BeitragFr, Apr 30, 2010 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
skey-z hat Folgendes geschrieben:
Habe es gerade mal probiert, auch die Exe kann ich nciht ausführen, er meldet, dass er die DX9....dll nicht finden konnte


Das hatte ich erwartet ... hier ein Päckchen mit den zwei fehlenden DLLs:

https://www.blitzforum.de/upload/file.php?id=8453
Farbfinsternis.tv

ozzi789

BeitragSa, Mai 01, 2010 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool!
Gibt zurzeit ja ein paar Leute die versuchen B3D DX9/OGL zu ermöglichen, find ich gut Smile

Weiter so !
(getestet unter siehe sig @home)

mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Farbfinsternis

BeitragMo, Mai 03, 2010 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Versuch den Ogre-generierten Kontext ins Blitz3D Fenster zu zwingen ist grandios ins Wasser gefallen, spielt aber auch keine Rolle da es eh nicht so auf meiner Linie lag, schließlich soll nach Blitz3D auch noch BlitzMax mit Ogre versorgt werden.

Nebenbei hatte ich noch versucht Ogre statisch zu linken ... das hat auch funktioniert aber ich verfolge das nicht weiter weil es zuviele Nachteile mit sich bringt. Beispielsweise muss man sich dann schon beim erstellen der DLL für DX oder OGL entscheiden, welchen Scene-Type man bevorzugt (Indoor, Outdoor, weites Gelände, extra große Aussenwelten etc.). So bleibe ich halt bei den DLLs was ja auch nicht so schlimm ist. Wer (z.B.) BSP nicht benötigt nimmt es aus der CFG und schmeisst es aus dem Plugins Ordner und gut ist. Ohnehin habe ich mich schon weitestgehend von der Idee getrennt Ogre3D irgendwie in das Korsett eines Blitz3D pressen zu müssen.

Heute habe ich das Projekt auf Visual C++ 2010 Express und die letzte Ogre3D Version 1.7.1 umgestellt. Dabei habe ich auch den Code ein wenig umgebastelt. Der Krimskram heißt nun BlitzOgre3D (denn simple geht anders) und schleift einiges mehr an Komplexität nach Blitz3D durch. Ich dachte mir dass es nicht notwendig ist zwei Zweige zu fahren wenn man einen komplexeren Zeig einfach direkt in Blitz3D wrapped wo es ohnehin unerlässlich ist ein Include zu verwenden.

Aus der originalen Blitz3D IDE kann man noch immer kein Ogre-Projekt starten, das scheint aber an der Art und Weise zu liegen wie Blitz3D seine temporären Executables behandelt (und vor Allem: wo es sie ablegt). Es gibt zwei Möglichkeiten Ogre3D in Blitz3D zu testen:

1. mit der originalen IDE ein Executable erzeugen und dann dieses testen
2. IDEal verwenden und dort direkt "Compile'n'Run" auswählen können

Die Altlasten bei Graphics3D und bei dem von dort aufgerufene "Init" sind noch vorhanden, werden aber bald eleminiert. In Zukunft erzeugt Graphics3D eine CFG bevor es Ogre3D initialisiert damit das OgreConfigTool nicht angezeigt werden muss.

Da Ogre3D mit Szenen arbeitet gibt es eine kleine Veränderung. Man kann eine neue Scene mit "CreateScene%(scene_name$)" erzeugen. Alle Entities verlangen jetzt bei der Erzeugung den optionalen Parameter "scene". Lässt man den Parameter weg wird die DefaultScene verwendet die ohnehin beim initialisieren der Engine erzeugt wird.
 

chi

BeitragFr, Mai 07, 2010 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Läuft momentan alles prima Wink. Werde dein Projekt gespannt verfolgen...

Farbfinsternis

BeitragSa, Mai 08, 2010 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir wurde befohlen mich für Projekt-Thread oder Worklog zu entscheiden, ich habe letzteres gewählt. Neuigkeiten also nur noch im BlitzOgre3D Worklog.
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group