JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9c5e28072b81b1e29e54c50674066b51Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Kapitel 19 "Die Klasse CDirect3D

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 18.01.2008, 22:45    Titel: Kapitel 19 "Die Klasse CDirect3D Antworten mit Zitat

Wünsche einen Schönen Guten Abend/Tag

Mein Problem besteht darin, das ich seit Gestern Mittag versuche das Programm das die 3D Funktionalität kapselt (Jetzt lerne ich Spieleprogrammierung mit DirectX, Seite 328) zum Laufen zu bringen.

Allerdings bekomme ich die gesammte Zeit immer die Gleiche Fehlermeldung an den Kopf geworfen ,obwohl ich alle Einstellungen die die Quellverzeichnisse und die Compillereinstelungen betreffen genau nach Buch vorgenommen habe.

Ich benutze auch alle Werkzeuge die in diesem Buch benutzt werden (sprich: auf der beiliegenden CD drauf sind).
Code::Blocks, Microsoft Platform SDK, Microsoft Visuak C++ Toolkit 2003.

Auch das DirectX SDK ist von dieser CD.

Hier die Fehlermeldung:
"fatal error C1083: Cannot open include file: 'd3d9': No such file or directory"

Davor habe ich die Visual C++ 6 Autoren Edition benutzt.
Dort war es auch der Gleiche Fehler.

Allerdings bekomme ich mit Code::Blocks auch bei Vorherigen Kapiteln die mit VC 6 funktioniert haben eine Fehlermeldung.

"fatal error LNK1181: cannot open input file 'C:\Programme\Microsoft.obj'[/i]

Also mein Latein als Beginner ist am Ende.
Was könnte ich noch tun ?

Wenn ich dem Computer, "d3d9" zwischen Zwei Scheiben Brot und einem Stück Speck Serviere, spielt das Laufwerk bestimmt irgendwann mal nicht mehr mit.

Habe so ziemlich alles mögliche ausprobiert.
Habe auch gesehen das so eine ähnliche Frage schon öfter gestellt wurde, allerdings mit weniger befriediegendem Ergebnis.

Danke im Vorraus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 18.01.2008, 23:45    Titel: Antworten mit Zitat

hmm probier doch mal d3d9.h Razz Very Happy ?
CPP:
#include <d3d9.h> // alle header außer die Standard C++-Header (namespace std) brauchen das ".h"


Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 18.01.2008, 23:59    Titel: Hallo Antworten mit Zitat

Das stand ja schon auf #include <d3d9.h>.

Die Meinungen zu diesem Thema gehen ja schon in die Übelsten Dimensionen über wenn ich so am Googeln bin.

Anscheinend gibt es kein Patentrezept.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 19.01.2008, 00:04    Titel: Antworten mit Zitat

hmm... war wohl doch nicht so leicht Rolling Eyes Naja, probier vllt mal das DX SDK neu zu installieren, und bei #include den kompletten Pfad anzugeben ("C:/Programme/Microsoft DirectX SDK..../d3d9.h") und schau was er sagt. Wichtig hierbei, dass du das '/' verwendest, für den PP.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 19.01.2008, 00:12    Titel: He He Antworten mit Zitat

Wink Ich glaube darauf reagiert er Allergisch "fatal error C1083 und für Invalide hält er sich auch.

Jetzt erzählt er mir wieder das er das Microsoft.obj haben will anstelle dem d3d9.

Alter Alter, das Ding wird mir immer Unheimlicher.

Übrigens bekomme ich Durchfall von Süßstoff.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 19.01.2008, 00:25    Titel: Antworten mit Zitat

kannst du ma schaun was du bei Project Arrow Properties Arrow Linker und dann irgendwo "External Dependencies" stehen hast?

EDIT: ach das is da ja gar nicht... sonst poste mal die command line bei Linker bitte
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 19.01.2008, 00:40    Titel: Hi Antworten mit Zitat

Also, da steht gar nichts.
Das mit dem Microsoft.obj hat sich anscheinend erledigt.
Auch bei den Vorherigen Projekten.
Stattdessen bekomme ich nachdem ich in Roter Schrift angezeigt.

unresolved external Symbol und das ziemlich oft untereinander.

Freunde ich mich jetzt etwa mit Code::Blocks an Very Happy ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 19.01.2008, 00:54    Titel: Antworten mit Zitat

unresolved external symbol heißt (meistens): lib vergessen. bedeutet, dass du bei deinem Project verschiedene libs hinzufügen musst, z.B. d3d9.lib. Am besten schaust du mal nach welche du hast und welche du (laut Buch) brauchst.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 19.01.2008, 00:56    Titel: yuuuuuuuuuuuuuuhuuuuuuuuuuuuuuuuu Antworten mit Zitat

Very Happy

Ich hab es geschafft mein Freund.

Ich habe das Ding geknackt.

Was für eine Geburt.

Ich danke dir recht Herzlich für deine Hilfe.

Aber..... Ich komme bestimmt wieder Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 19.01.2008, 01:01    Titel: Antworten mit Zitat

Habe die Pfadangaben mit den Libs und den Includes einfach in Klammern gepackt und hatte tatsächlich was vergessen (deshalb die viele Rote Schrift die ich sonst nur aus der Schule her kenne Very Happy )
Bin dann in Ruhe alles Nochmal angegangen und dann hat es gefunzt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 21.01.2008, 20:07    Titel: Antworten mit Zitat

Ich wünsche allen ein Hallo und erneut einen schönen Abend/Tag

Mein Problem dreht sich diesesmal um Kapitel 20/Surfaces.

Um für mich selbst die Neu vorgestellten Funktionen & Co besser Verständlich zu machen, habe ich die Klasse aus Kapitel 19 die die Direct3D Funktionalität kapselt wieder in einen kompletten Quellcode verwandelt (Fenster, Direct3D, Surfaces alles in einer Datei wie am Anfang).
Ich habe die Sache mit der Klasse und der Aufteilung zwar verstanden, aber aufgrund meiner eigenen Methode zu lernen habe ich es lieber wenn alles zusammen steht um die Zusammenhänge untereinander besser verstehen zu können.

Nun zu meinem Problem bevor das die Neue Herr der Ringe Trilogie wird.

Alles läßt sich problemlos kompilieren und auch starten, aber nach einer Sekunde Fenster mit weißem Inhalt ist auch alles wieder vorbei.

Da ist irgendwo der Wurm drin (Der Anfängerwurm Very Happy )

[/code]
Code:
// Beschreibung: Dieses Programm zeigt wie DirectX Graphics initialisiert wird.

// Headerdateien
#include <d3d9.h>
#include <d3dx9.h>

// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);

// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

// Funktion zur Initialisierung von Direct3D
BOOL InitDirect3D(HWND hWnd);   // Funktion um festzustellen ob Direct3DCreate9 korrekt ausgeführt wurde

// Direct3D-Objekte wieder freigeben
void CleanUpDirect3D(void);      // Funktion um Direct3D wieder zu beenden

// Zeiger auf das Direct3D-Objekt (Interface)
LPDIRECT3D9       lpD3D       = NULL;   //Interface wird ein Name zugewiesen und auf den Wert NULL gesetzt
// Zeiger auf das Direct3D-Device
LPDIRECT3DDEVICE9 lpD3DDevice = NULL;   // Kommt in der Switch Anweisung zum Einsatz

LPDIRECT3DSURFACE9 lpBackBuffer = NULL;

LPDIRECT3DSURFACE9 lpSurface = NULL;



// Das Fensterhandle
HWND hWnd = 0;

// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance,      // Handle der Programminstanz
                   HINSTANCE hPrevInstance,  // Handle der letzten Instanz
                   LPSTR lpCmdLine,          // Kommandozeile
                   int nCmdShow)             // Art wie das Fenster angezeigt werden soll
{
    // Fenster erzeugen und Handle speichern
    hWnd = CreateMainWindow(hInstance);

    // Wenn der Rueckgabewert 0 ist, ist ein Fehler aufgetreten
    if(0 == hWnd)
    {
        MessageBox(0, "Fenster konnte nicht erzeugt werden", "Fehler", MB_OK);
        return -1;
    }

    // Direct3D initialisieren
    if(!InitDirect3D(hWnd))
    {
      return -1;
   }

   // Struktur, in der Informationen zur Nachricht gespeichert werden
    MSG msg;

    // Diese Schleife laeuft bis die Nachricht WM_QUIT empfangen wird
    while(GetMessage(&msg, NULL, 0, 0))
   {
        // Nachricht an die Callbackfunktion senden
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

 // Direct3D-Objekte wieder frei geben
    CleanUpDirect3D();

    // Rueckgabewert an Windows
    return 0;
}

// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wndClass =
    {
        sizeof(WNDCLASSEX),                                 // Groesse angeben
        CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW,    // Standardstile
        MessageHandler,                                     // Callback-Funktion
        0,                                                  // Zusaetzliche Angaben
        0,                                                  // nicht benoetigt
        hInstance,                                          // Anwendungsinstanz
        LoadIcon(NULL, IDI_WINLOGO),                        // Windows-Logo
        LoadCursor(NULL, IDC_ARROW),                        // Normaler Cursor
        (HBRUSH)GetStockObject(WHITE_BRUSH),                // Weisser Pinsel
        NULL,                                               // kein Menue
        "WindowClass",                                      // Der Name der Klasse
        LoadIcon(NULL, IDI_WINLOGO)                         // Windows Logo
    };


    RegisterClassEx(&wndClass);

    return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
                          "WindowClass",          // Klassenname
                          "DirectX Graphics",     // Fenstertitel
                          WS_OVERLAPPEDWINDOW |   // Fenster
                          WS_VISIBLE,             // Eigenschaften
                          50, 50, 800, 600,       // Anfangsposition und Groesse
                          NULL,                   // Handle des Elternfensters
                          NULL,                   // Handle des Menues
                          hInstance,              // Anwendungsinstanz
                          NULL);                  // wird nicht benoetigt
}


// Diese Funktion wird von Windows aufgrufen, wenn
// eine Nachricht fuer Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // Farbe fuer die Fuellung des Backbuffer festlegen
    D3DCOLOR ClearColor = D3DCOLOR_XRGB(0, 0, 0xFF);   // Farbe für ClearColor

    // testen, um welche Nachticht es sich handelt
    switch(msg)
    {
        // Programm beenden, wenn das Fenster
        // geschlossen wird
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
             break;

        case WM_KEYDOWN:
               switch(wParam)
               {
                 // Wenn ESC gedrueckt, Anwendung beenden
                 case VK_ESCAPE:
                         DestroyWindow(hWnd);
                      break;
               }
             break;

        case WM_PAINT:


                 // Puffer mit blau fuellen
                lpD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, ClearColor, 0, 0);   // Backbuffer wird gelöscht

                lpD3DDevice->BeginScene();      // Zwischen diesen beiden AUfrufen müssen alle Objekte gezeichnet werden

                RECT DestRect = { 100, 100, 420, 300 };

                lpD3DDevice->StretchRect(lpSurface, NULL, lpBackBuffer, &DestRect, D3DTEXF_NONE);

                lpD3DDevice->EndScene();

                lpD3DDevice->Present(0, 0, 0, 0);   // Sorgt dafür das der Backbuffer angezeigt wird

             break;
    }

    // Standardnachrichtenverarbeitung von Windows
    return DefWindowProc(hwnd, msg, wParam, lParam);
}


// Direct3D initialisieren
BOOL InitDirect3D(HWND hWnd)
{
    // Direct3D-Objekt erzeugen
    lpD3D = Direct3DCreate9(D3D_SDK_VERSION);

    if(NULL == lpD3D)
    {
     // Fehler, D3D-Objekt wurde nicht erzeugt
     return FALSE;
    }

    // Parameter fuer den Modus festlegen
    D3DPRESENT_PARAMETERS PParams;
    ZeroMemory(&PParams, sizeof(PParams));
   // Multisampling ist eine Methode zur Kantenglättung
    PParams.SwapEffect     = D3DSWAPEFFECT_DISCARD;      // Verfahren mit dem der Backbuffer angezeigt werden soll
    PParams.hDeviceWindow  = hWnd;
    PParams.Windowed       = TRUE;
   // PParams.BackBufferCount legt fest wie viele Backbuffer verwendet werden sollen
    PParams.BackBufferWidth  = 800;                  // Breite des Backbuffers
    PParams.BackBufferHeight = 600;                  // Höhe des Backbuffers
    PParams.BackBufferFormat = D3DFMT_A8R8G8B8;         // Farbtiefe des Hintergrundpuffers



    // Direct3D-Geraet anlegen
    if(FAILED(lpD3D->CreateDevice(
                                 D3DADAPTER_DEFAULT,               // Primäre Grafikkarte
                                 D3DDEVTYPE_HAL,                  // Hardwareunterstützung
                                 hWnd,                           // Handle des Fensters
                                 D3DCREATE_SOFTWARE_VERTEXPROCESSING,   // Hardwareunterstützung bei Geometrieverarbeitung
                                 &PParams,                        // Zeiger auf D3DPresent_PARAMETERS
                                 &lpD3DDevice)))

lpD3DDevice->CreateOffscreenPlainSurface (320, 200, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpSurface, 0);

RECT r1 = { 0, 0, 320, 100 };
RECT r2 = { 0, 100, 160, 200 };
RECT r3 = { 160, 100, 320, 200 };

lpD3DDevice->ColorFill (lpSurface, &r1, 0xF0FF0000);
lpD3DDevice->ColorFill (lpSurface, &r2, 0xFF00FF00);
lpD3DDevice->ColorFill (lpSurface, &r3, 0xFF0000FF);

lpD3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &lpBackBuffer);



    {

        // Fehler, kann Geraet nicht anlegen
        return FALSE;
    }

   return TRUE;
}


// Direct3D Objekte freigeben
void CleanUpDirect3D(void)
{
    // testen, ob die Objekt angelegt
    // wurden und ggf. freigeben
    if(NULL != lpSurface)
    {
        lpSurface->Release();
        lpSurface = NULL;
    }

    if(NULL != lpBackBuffer)
    {
        lpBackBuffer->Release();
        lpBackBuffer = NULL;
    }

    if(NULL != lpD3DDevice)
    {
        lpD3DDevice->Release();
        lpD3DDevice = NULL;
    }

    if(NULL != lpD3D)
    {
        lpD3D->Release();

        lpD3D = NULL;
    }
}


Ich bedanke mich schon im Vorfeld für eure Hilfe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.01.2008, 22:05    Titel: Antworten mit Zitat

hast du schonmal versucht zu debuggen? Das solltest du immer zuerst tun.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fastfooot
Mini JLI'ler



Anmeldedatum: 04.08.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 21.01.2008, 23:26    Titel: Antworten mit Zitat

Hmmm

Ich werde es mal probieren.
Muß allerdings erstmal mit dem Ding zurechtkommen.
Hatte ja bis vor ein paar Tagen noch VC 6 benutzt und dieses Thema nur überflogen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum