DXScene Objekte zur Runtime erstellen und verwalten



  • Ich habe mir das Demo runtergeladen und ganz interessant, leider sehe ich keinerlei Möglichkeiten über den Quelltext Objekte hinzu zu fügen. Hat jemand schon damit rumgespielt und kann mir sagen wie man dies realisiert? Lohnt sich die Komponente überhaupt? Der Support da reagiert leider mal gar nicht.



  • Achja, ich wollte ja noch fragen, ob jemand für BCB2009 eventuell eine kostengünstige 3D Engine kennt und Tutorials dazu. Würde gern bissle 3D Sachen lernen, aber für den CBuilder finde ich nur Uraltes und nicht weiter entwickeltes. Macht hier wer was mit 3D? Was kommt denn da zum Einsatz? 😉



  • Hallo

    Auch mit dem Builder läßt sich zunächst die Windowseigene DirectX-Schnittstelle ansprechen. Ein Beispiel-Projekt sollte auch beim Builder dabeisein, im Verzeichnis Examples.
    Externe Libraries gibt es natürlich auch, dazu solltest du dann aber im entsprechenden Grafik/Spieles-Subforum nachfragen.

    So oder so ist das ein schwieriges Feld, ohne gute(!) Programmierkenntnisse (und am besten Mathekenntnisse) kommst du da nicht weit.

    bis bald
    akari



  • Irrlicht Engine läuft mit dem RAD 2009.
    http://irrlicht.sourceforge.net/



  • @akari
    In meinem Rad6.0 finde ich kein DirectX Beispiel 😞

    @VergissEs
    Das Irrlicht.. wau, gewachsen. Hab das damals mal beobachtet wo er quasi angefangen hat. Da war die Engine aber noch sehr mager. Mal anschauen, Danke für den Tipp! 🙂



  • VergissEs schrieb:

    Irrlicht Engine läuft mit dem RAD 2009.

    Kennst du ein Tutorial, wie man Irrlicht in RAD2009 korrekt einbindet und besteht überhaupt die Möglichkeit die 3D Sachen in die VCL in einem Bereich anzuzeigen und somit mit der VCL und dem 3D Hand in Hand zu arbeiten? Schade das bei Irrlicht keiner ein solches Tutorial geschrieben hat.



  • Also das in einen Panel zb gerendert wird

    //Handle to the Panel
    	HWND hIrrlichtWindow = Panel1->Handle;
    
    	irr::SIrrlichtCreationParameters param;
    	param.WindowId = hIrrlichtWindow;
    	param.DriverType = video::EDT_OPENGL;
    

    Und hier ist eine Anleitung wie man es mit Borland kompliert, leider finde ich nicht mehr den original Link:

    Irrlicht Engine mit Borland-C++ kompilieren
    Standardmäßig lässt sich die Irrlicht Engine leider nur mit Visual C++ und Dev-C++ kompilieren. Für alle Borland-Liebhaber gibt es jedoch auch eine Möglichkeit, die ich hier vorstellen möchte.
    Die Engine wird in der Borland-Version die Softwarerenderer, OpenGL und Direct3D 9 unterstützen, allerdings nicht 8.1, weil hierfür in den neuen SDKs die Header fehlen.
    Ich verwende in diesem Tutorial das RAD Studio 2007 und die Irrlicht Engine in Version 1.4, es kann also sein, dass ihr etwas anders vorgehen müsst.

    Ladet die Engine herunter und entpackt sie in ein beliebiges Verzeichnis.
    Ladet die Header für Direct3D entweder hier (Zip-Archiv, 122 KB) oder mit einem DirectX-SDK herunter und entpackt sie beispielsweise in das Engine-Quelltext-Verzeichnis ("Source\Irrlicht") unter "dxsdk".
    Erstellt ein neues C++-DLL-Projekt (bei mir "Dynamische Link Bibliothek", was ein wenig gewöhnungsbedürftig übersetzt ist). Wählt als Optionen "DLL im VC++-Stil" und "Multi-Threads" (aber nicht die VCL).
    Löscht die automatisch erstellte Quelltextdatei aus dem Projekt (bei mir heißt sie "File1.cpp").
    Bennent das Projekt von "Project1.dll" in "Irrlicht.dll" um.
    Speichert die Projektdatei im Quelltextordner der Engine ab (unter "Source\Irrlicht").
    Öffnet jetzt die Projektoptionen und gebt in der Kategorie "C++-Compiler" unter "Pfade und Definitionen" bei "Definition" "IRRLICHT_EXPORTS;WIN32" an (bzw. WIN64 für 64-Bit-Compiler).
    Tragt unter "Include-Pfad" die Ordner "jpeglib", "libpng", "zlib" und "dxsdk" (je nach dem, wie ihr den Ordner genannt habt) aus dem Quelltextordner sowie das "Include"-Verzeichnis aus dem Engine-Ordner ein.
    Benennt die "Irrlicht.cpp" im Source-Ordner in "Main.cpp" (oder einen ähnlichen Namen) um.
    Löscht im Ordner "jpeglib" die Datei "jconfig.h" und benennt die "jconfig.bcc" in "jconfig.h" um.
    Fügt nun alle Quelltextdateien (.c und.cpp) aus dem Quelltextordner sowie alle aus den Unterverzeichnissen "jpeglib", "libpng" und "zlib" mit Außnahme der Dateien "example.c", "jmemansi.c", "jmemdos.c", "jmemmac.c" und "jmemname.c" aus dem "jpeglib"-Ordner und "example.c" und "pngtest.c" aus dem "libpng"-Ordner eurem Projekt hinzu.
    Öffnet jetzt die Dateien "pngerror.c" und "pngtrans.c. Löscht dort alle const-Schlüsselwörter aus den Definitionen, die zusätzlich PNG_CONST enthalten.
    Öffnet die Datei "D3D9Driver.h" aus dem Source-Ordner und fügt vor der Zeile "#include <d3d9.h>" (20) folgendes ein:
    #ifdef __BORLANDC__
    #define min(a, b) (((a) < (b)) ? (a) : (b))
    #endif
    Öffnet dann die "d3dx9math.inl" aus dem DirectX-Header-Ordner und fügt nach der Zeile "#ifdef __cplusplus" (19) folgenden Code ein:
    #ifdef __BORLANDC__
    #define sqrtf(x) ((FLOAT) sqrt(x))
    #endif
    Passt nun die "IrrCompileConfig.h" aus dem "Include"-Ordner euren Bedürfnissen an. Kommentiert einfach alle Funktionen, die ihr nicht benötigt, aus. Direct3D 8.1 muss auf jeden Fall deaktiviert werden, da hier die Headerdateien fehlen.
    Speichert alle Dateien ab. Nun sollte sich die Engine ohne Probleme kompilieren lassen.



  • Wau. Größes Dankeschön! 👍 🙂

    Wenn ich den Text google finde ich eine Seite, die leider nur 404 ausspuckt, sprich nicht mehr vorhanden ist. Was sehr schade ist. Das suchen sicherlich viele. Dort gab es auch noch ein ZIP mit den DirectX-Headern. Ich glaube ich habe die Header aber selbst gefunden, zumindest hat das nach dem Tutorial (+2 bis 3 Dateien noch entfernen rpng-x.c und sowas) fehlerfrei compiliert.

    Ich habe jetzt eine Irrlicht.dll 6.144 Bytes und Irrlicht.lib mit 84 Bytes. Das ist murxig klein und niemals richtig. Meine SQlite3.lib ist schon über 1MB die ich direkt in mein Projekt reinladen kann.

    Was habe ich noch nicht richtig eingestellt? Wie bekomme ich eine LIB, die ich ins Projekt includieren kann und somit keine externe DLL benötige und wie eine DLL welche ich gegebenenfalls auch mal extern dazulegen kann? Die Einstellungen von RAD 2009 sind mir noch etwas fremd. Bin noch BCB5 Nutzer. ^^



  • ~dxscene schrieb:

    Was habe ich noch nicht richtig eingestellt? Wie bekomme ich eine LIB, die ich ins Projekt includieren kann und somit keine externe DLL benötige

    Bei Irrlicht AFAIK gar nicht.



  • Ok, aber die DLL sollte dann wohl wesentlich größer sein. Irgendwo müssen die Informationen ja stehen.

    Ich habe im Irrlicht-Forum eine ZIP gefunden für BCB6 mit Irrlich Version 1.4 (aktuell ist 1.5) und dort im bin-Ordner ist
    D3DX8.DLL 270KB LIB-Version 26.5KB
    D3dx8d.DLL 510KB LIB-Version 27KB
    D3DX9.DLL 825KB LIB-Version 41KB
    Irrlicht.DLL 2.81MB LIB-Version 916Byte

    Die DLL dort ist gross und wozu brauch man die D3DX* Sachen?
    Denn die habe ich ja so gar nicht.



  • Hallo

    Ok, aber die DLL sollte dann wohl wesentlich größer sein.

    Dann hast du irgendwas falsch gemacht oder etwas vergessen. Geh nochmal die Arbeitsschritte von VergissEs durch

    wozu brauch man die D3DX* Sachen?

    Auch Irrlicht setzt unter Windows auf DirectX auf. Sonst müßte es sich ja selber um die Treiber für die Unterstützung durch die Grafikkarten kümmern.

    bis bald
    akari



  • Ich habe aus den Sourcecode von Irrlicht eine LIB erstellt und diese dann in RAD eingebunden ohne DLL die lib hat eine größe von ca 7,8 MB Release



  • Wau das richtig groß 😉

    Ups habe vergessen CPP einzubinden 🙄
    So jetzt compiliert er richtig was los, aber ich erhalten einen Fehler bei

    [BCC32 Fataler Fehler] CImageLoaderWAL.h(28): F1003 error-Direktive: compiler not supported

    #ifdef _MSC_VER
    #	pragma pack( push, packing )
    #	pragma pack( 1 )
    #	define PACK_STRUCT
    #elif defined( __GNUC__ )
    #	define PACK_STRUCT	__attribute__((packed))
    #else
    #	error compiler not supported
    #endif
    

    Ich habe im letzten Punkt

    Passt nun die "IrrCompileConfig.h" aus dem "Include"-Ordner euren Bedürfnissen an. Kommentiert einfach alle Funktionen, die ihr nicht benötigt, aus. Direct3D 8.1 muss auf jeden Fall deaktiviert werden, da hier die Headerdateien fehlen.
    Speichert alle Dateien ab. Nun sollte sich die Engine ohne Probleme kompilieren lassen.

    Nichts angepasst, weil ich nicht wüsste was. Habe ja Header für DX8 und DX9.
    Kannst du was zu dem Fehler sagen? Habe Irrlicht 1.5 Source hier. So wie ich das rauslese fehlt was für RAD Compiler.



  • ~dxscene schrieb:

    #ifdef _MSC_VER
    #	pragma pack( push, packing )
    #	pragma pack( 1 )
    #	define PACK_STRUCT
    #elif defined( __GNUC__ )
    #	define PACK_STRUCT	__attribute__((packed))
    #else
    #	error compiler not supported
    #endif
    
    #ifdef _MSC_VER
    #	pragma pack( push, packing )
    #	pragma pack( 1 )
    #	define PACK_STRUCT
    #elif defined(__BORLANDC__)
    #	pragma pack(push, 1) /* analog #pragma pack(pop) auf der anderen Seite */
    #elif defined( __GNUC__ )
    #	define PACK_STRUCT	__attribute__((packed))
    #else
    #	error compiler not supported
    #endif
    


  • Danke schön 😉 , hatte erstmal den Inhalt von MSC_VER genommen, damit ich weiter compilieren kann, denn das dauert laaaange.. Viele Minuten. 😮

    Ich habe nach über 600 Warnungen diesen Fehler:
    [ILINK32 Fehler] Fatal: Datei D3DX8.LIB kann nicht geöffnet werden

    Ich habe aber unter Optionen -> C++ Compiler -> Verzeichnisse und Bedingungen -> Include Dateisuchpfad den Pfad C:\DXSDK\lib eingegeben und dort liegt auch eine d3dx8.lib (2.04MB) von Original DX8SDK.

    Ich lade gerade DX9SDK runter, da mir die libs für DX9 fehlen.

    @VergissEs
    Hast du das Archiv mit den DXZeugs noch? Kannst du bitte den Inhalt auflisten? Mir scheint ja irgendwas zu fehlen. 😞



  • ~dxscene schrieb:

    [ILINK32 Fehler] Fatal: Datei D3DX8.LIB kann nicht geöffnet werden

    Ich habe aber unter Optionen -> C++ Compiler -> Verzeichnisse und Bedingungen -> Include Dateisuchpfad den Pfad C:\DXSDK\lib eingegeben und dort liegt auch eine d3dx8.lib (2.04MB) von Original DX8SDK.

    Das hilft herzlich wenig; das DirectX-SDK enthält COFF-Libraries, C++Builder benutzt aber das OMF-Format. Lade dir ggf. unter http://www.clootie.ru/cbuilder/index.html die nötigen Libraries herunter.



  • http://www.magixsoft.de/dxsdk.zip

    und dann in der include/IrrCompileConfig.h
    Zeile 86

    #if defined(_IRR_WINDOWS_API_) && (!defined(__GNUC__) || defined(IRR_COMPILE_WITH_DX9_DEV_PACK))
    
    //#define _IRR_COMPILE_WITH_DIRECT3D_8_
    #define _IRR_COMPILE_WITH_DIRECT3D_9_
    
    #endif
    


  • @audacia
    Wau danke schön! Auf der Seite vermisse ich leider ein Tutorial, wie man dies selber machen kann. Was passiert wenn es von dort mal keinen Support mehr gibt?

    @VergissEs
    Vielen Dank! Deine sind neuer. Ich habe aber jetzt mal, da so schnell fertig, die neuesten aus der DX9SDK genommen.

    Fügt nun alle Quelltextdateien (.c und.cpp) aus dem Quelltextordner sowie alle aus den Unterverzeichnissen "jpeglib", "libpng" und "zlib" mit Außnahme der Dateien "example.c", "jmemansi.c", "jmemdos.c", "jmemmac.c" und "jmemname.c" aus dem "jpeglib"-Ordner und "example.c" und "pngtest.c" aus dem "libpng"-Ordner eurem Projekt hinzu.
    Öffnet jetzt die Dateien "pngerror.c" und "pngtrans.c. Löscht dort alle const-Schlüsselwörter aus den Definitionen, die zusätzlich PNG_CONST enthalten.

    Genau das habe ich so gemacht. Trotzdem erhalte ich nun dieses:

    [ILINK32 Fehler] Error: Nicht auflösbares externes '_crc32' referenziert von \RELEASE\PNG.OBJ
    [ILINK32 Fehler] Error: Nicht auflösbares externes '_deflateInit2_' referenziert von \PNGWUTIL.OBJ
    [ILINK32 Fehler] Error: Nicht auflösbares externes '_deflateReset' referenziert von \RELEASE\PNGWUTIL.OBJ
    [ILINK32 Fehler] Error: Nicht auflösbares externes '_deflate' referenziert von \PNGWUTIL.OBJ
    [ILINK32 Fehler] Error: Nicht auflösbares externes '_deflateEnd' referenziert von \RELEASE\PNGWRITE.OBJ

    crc32() ist zum Beispiel auch nirgends definiert. Woher will Irrlicht das jetzt nehmen?



  • Öffnet jetzt die Projektoptionen und gebt in der Kategorie "C++-Compiler" unter "Pfade und Definitionen" bei "Definition" "IRRLICHT_EXPORTS;WIN32" an (bzw. WIN64 für 64-Bit-Compiler).
    Tragt unter "Include-Pfad" die Ordner "jpeglib", "libpng", "zlib" und "dxsdk" (je nach dem, wie ihr den Ordner genannt habt) aus dem Quelltextordner sowie das "Include"-Verzeichnis aus dem Engine-Ordner ein.

    das haste auch schon gemacht?



  • ~dxscene schrieb:

    crc32() ist zum Beispiel auch nirgends definiert.

    Mein Fehler. 🙄

    Ich bekomme aber nach 5min compilieren immer noch nur eine DLL mit 3MB und eine LIB mit 900Byte. Ich habe im Release Ordner 356 Dateien mit insgesamt 68.7MB.

    @VergissEs
    Hatte "zlib" vergessen, nachdem ich in RAD die Ansicht auf Verzeichnisliste gesetzt habe sah ich es. War mir sicher das auch hinzugefügt zu haben. Aber wieso bekomme ich keine 7MB LIB? 😞
    Mein Release Ordner ist prall und voll.


Anmelden zum Antworten