Direct3D 8 initialisieren im BCB???



  • Hallo

    Also ich würde gerne in meinem Programm ein 3d modell laden und anzeigen usw.
    nun muss man ja D3d initialisieren aber wie tut man dies im BCB oder
    ist das völlig normal und wie kann ich dan die ausgabe bsp. in ein
    Panel legen.

    wäre dankbar für antworten THX

    Mfg Happymax

    Edit: die ganzen Borlandkompatiblen Libs für DirectX8 hab ich schon.



  • Ich hab ma diesen Initialisierungscode ausprobiert.
    ZFX Tut DX8

    aber da bekomme ich 3 Fehler 😞 :

    [C++ Fehler] 3DInit.cpp(124): E2451 Undefiniertes Symbol 'dwM'
    [C++ Fehler] 3DInit.cpp(138): E2451 Undefiniertes Symbol 'dwF'
    [C++ Fehler] 3DInit.cpp(264): E2451 Undefiniertes Symbol 'm'
    

    und ich hab auch keine ahnung wie ich den kram auf ein Panel legen kann?

    Mfg Happymax



  • Ähm weis denn wirklich niemand wie das geht oda wie 😕
    ich würde das gerne wissen

    Thx

    Mfg Happymax :xmas1:



  • Hallo

    hab weder mit DX oder dem ZFX-Tut Erfahrung, aber hier findest du eine Anleitung, um DX im Builder einzusetzen.
    Desweiteren sind unter <BCB_Path>\Examples\DDraw noch Beispiele für DDraw.

    bis bald
    akari



  • danke aber ich hab mir das auch schon angesehen und die wandeln nur die dxsdk
    beispiele um und nichma das kann ich weil ich nur BCB6Pers habe 😞
    allerdings steht da wie man das auf vcl forms anwenden kann das ist schoma gut 👍



  • Ok ich hab ein Problem da steht:

    4. Add the regular Direct3D initialization code to the function body of
    InitDirect3D. (It is not the purpose of this tutorial to introduce you to
    Direct3D. See the References section for links to DirectDraw and Direct3D
    tutorials [5].)

    so nun hab ich den normalen in initializations code nicht was mach ich denn jetzt?
    kennt einer hir vieleicht den code.
    und die InitDirect3D funktion wie mach ich denn das ich denk ma so ist das richtig.

    void __fastcall TForm1::InitDirect3D(TMessage &Msg)
    {
    
    }
    

    wenn das richtig ist fehlt mir ja nur noch der initializations code.



  • Happymax, erst einmal wünsche ich dir ehrlich viel Erfolg mit deinem Projekt! Lass dich nicht entmutigen, halte durch. Ich habe das Gefühl dass du erst noch an den Grundlagen arbeiten musst.

    Wenn du keine Antworten bekommst liegt es evtl. daran dass deine Frage nicht präzise ausgedrückt und konkret abgegrenzt ist.

    Beim schnellen Abgleich deiner Fehlermeldungen mit dem Code von Stefan Zerbst, auf den du verweist, ist mir aufgefallen:

    for (DWORD dwM=0L; dwM<dwAnz_Modi; dwM++) {...}
    

    etwas später gefolgt von

    if (dwM == dwAnz_Modi) {...}
    

    Das ist mir schonmal woanders bei Stefan aufgefallen (ich glaube in einem seiner Bücher). Er hat sich offenbar an einen Bug im Visual C++ gewöhnt (der VC++ 6 schluckt diesen falschen Code klaglos, und das neue Visual Studio hat extra eine Compiler-Option um dieses "Feature" wie MS es nennt aus Kompatibilitätsgründen zu aktivieren).

    Das erklärt schon mal die Fehlermeldungen. BCB6 nimmt die C++-Sprache schon etwas genauer: die Variable dwM gilt hier nur innerhalb der Schleife, in der sie deklariert wurde, und "verschwindet" nach Beendigung der Schleife. Sie müsste in der zweiten Schleife neu deklariert werden.

    Die Stefan Zerbst DX9 Tutorials habe ich schon mit dem BCB nachvollzogen, mit kleinen Korrekturen wie oben genannt funktionieren sie einwandfrei. Deine Init-Funktion / den D3D Init-Code kannst du übrigens hinlegen wohin du willst, um die zweite Frage zu beantworten.



  • Tilsiter schrieb:

    Das ist mir schonmal woanders bei Stefan aufgefallen (ich glaube in einem seiner Bücher). Er hat sich offenbar an einen Bug im Visual C++ gewöhnt (der VC++ 6 schluckt diesen falschen Code klaglos, und das neue Visual Studio hat extra eine Compiler-Option um dieses "Feature" wie MS es nennt aus Kompatibilitätsgründen zu aktivieren).

    sehr verwerflich wenn solche programmierer bücher schreiben und ihre unzureichenden kenntnisse auch noch anderen aufbinden wollen. 👎



  • Vielen Dank Tilsiter
    ich werd gleich ma gucken ob ich da weiter komme.

    THX

    Mfg Happymax :xmas1:



  • so das Programm läuft kein Fehler keine Warnung
    doche es ist nur ne normal Form.

    und der D3dInit Code von ZFX ist sieht ja ca. so aus:

    // F U N K T I O N E N /////////////////////////////////////////////
    
    /**
     * Erstellt das Direct3D Hauptinterface-Objekt und ruft dann die
     * Enumeration der vorhandenen Adapter, Modi und 3D Devices auf.
     */
    BOOL xD3D_initialisieren(DWORD dwBreite, DWORD dwHoehe,
                             DWORD dwZ_Bits, DWORD dwStencil_Bits) {
       BOOL blnOkay;
    

    Ist vieleicht ne dumme frage aber ich muss doch

    xD3D_initialisieren();
    

    jetz in mein
    FormCreate reinschreiben oder net 😕 .
    Weil bis jetzt macht er sonst ja nichts.
    Und ich müsste in die Klammer ja was reinsetzt das müsste doch
    dann ca. so ausehen.

    xD3D_initialisieren(Panel-1>Width,Panel-1>Height,KP,KP);
    

    Mfg Happymax



  • Da ist nochwas das ist da nicht gerade sehr ausfürhlich beschrieben
    und ich bin nicht so gut als das ich das alles verstehhen könnte.
    Also diese Punkte sind mir nicht ganz klar.

    6.Register "GameLoop" as the message handler for WM_ENTERGAMELOOP (which you    
      can #define as WM_USER+102).
    
    7.Implement GameLoop as follows:
    
      while (!UserWantsToQuit)
      {
      Application->ProcessMessages();
      RenderScene();
      }
    
      Note: This game loop will ensure that the framerate is as high as possible.    
      For games, TTimers would not be good enough. Calling ProcessMessages lets   
      the app still react to messages. The regular events are fired.
    
    8.Implement RenderScene.
    
    9.Add "bool UserWantsToQuit" to class TForm1. Set it to false in the   
      constructor and to true in the OnCloseQuery handler that you create.
    
    11.Make sure that you #include ddraw.h and d3d.h. Link to dxguid.lib,    
       ddraw.lib, and d3dim.lib.
    

    Denn Punkt nummer 11. versteh ich doch was meint der mit Link etwa

    Menu|Projekt|Dem Projekt hinzufügen

    und dann dxguid.lib,ddraw.lib und d3dim.lib hinzufügen.

    Danke füreure hilfe

    Mfg Happymax :xmas1:



  • Also ich hab mir mal die Projekt datein dort Runtergeladen
    doch die Funktionierten nicht richtig also hab ich ein Projekt
    aufgemacht und alles was in dem Archiv war eingebunden bisch auf
    Project1.bpr nun funktionert auch alles soweit bis auf das ich diesen
    Fehler bekomme.

    [Linker Fehler] Unresolved external 'DirectDrawCreateEx' referenced from S:\DX8SDK\BORLANDDX\TEST03\MAINFRM.OBJ
    

    wenn der Fehler weg ist sollte das soweit ja erstmal laufen.
    Also wenn jemand das weis wäre es net wenn er mir helfen könnte.



  • Hallo

    das liegt daran, das du noch den Punkt 11 aus der von dir geposteten Liste ausführen must, um die aufgerufenen DX-Funtionen linken zu können.

    bis bald
    akari



  • Danke aber es gibt noch ein Problem es gibt keine
    d3dim.lib
    ich habs ohne die ausprobiert aber dann bekomme ich diese fehler:

    [C++ Fehler] MainFrm.cpp(193): E2031 Typumwandlung von 'float' nach '_D3DVECTOR' nicht zulässig
      [C++ Fehler] MainFrm.cpp(195): E2031 Typumwandlung von 'float' nach '_D3DVECTOR' nicht zulässig
      [C++ Fehler] MainFrm.cpp(197): E2031 Typumwandlung von 'float' nach '_D3DVECTOR' nicht zulässig
      [C++ Fehler] MainFrm.cpp(199): E2031 Typumwandlung von 'float' nach '_D3DVECTOR' nicht zulässig
    

    wenn ich nicht #include <d3d.h> mache dann startet das programm
    aber es macht nichts.

    THX

    Mfg Happymax


Anmelden zum Antworten