JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Problem mit Skybox

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



Anmeldedatum: 08.03.2008
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 08.03.2008, 12:07    Titel: Problem mit Skybox Antworten mit Zitat

Ich hab beim tutorial 3dObjects ein Problem.

Ich glaub das es sich um folgendem Handelt:
m_vecSky[FRONT] = LoadTexture(SKYBOX_FR);
m_vecSky[BACK] = LoadTexture(SKYBOX_BK);
m_vecSky[LEFT] = LoadTexture(SKYBOX_LF);
m_vecSky[RIGHT] = LoadTexture(SKYBOX_RT);
m_vecSky[TOP] = LoadTexture(SKYBOX_TP);
m_vecSky[BOTTOM] = LoadTexture(SKYBOX_BM);

Der Fehler ist vermutlich m_vecSky.
Den wenn ich
if(LoadTexture(SKYBOX_FR))
{
MessageBox..
}
mache funktionierts.

Das erstellen ist kein Problem.
Windows schreibt *.exe funktioniert nicht mehr -> beenden.

Verwende Win Vista.


Kann mir da jemand bitte helfen.
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: 08.03.2008, 15:45    Titel: Antworten mit Zitat

damit wir dir gut helfen können, solltest du uns zumindest etwas mehr code ziegen; das nötigste ist folgendes:
  • Die Deklaration von m_VecSky
  • Die Deklaration von FRONT, LEFT, BACK, ...
  • Die Signatur von LoadTexture (Rückgabetyp und Argumente...)
  • Die Deklaration von SKYBOX_FR, SKYBOX_BK, ...
  • Exclamation Die Fehlermeldung oder was an dem ganzen nicht funktioniert Exclamation
  • Und ggf. Deine Arbeitsumgebung(Compiler...)


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



Anmeldedatum: 08.03.2008
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 08.03.2008, 17:40    Titel: Antworten mit Zitat

sry.
Verwende Visual C++ 2008 Express
OS: Windows Vista Home Premium

Wie bereits gesagt hab ich keinen Fehler beim Übersetzen der exe datei.
windows erkennt einen Fehler beim Ausführen der Anwendung und beendet sie. Liegt das vielleicht an Win Vista?

Skybox.h:
Code:

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

#include <vector>

using namespace std;

// Texturnamen fuer die Skybox definieren

#define SKYBOX_FR "media/SKYBOX/Skybox_FR.png"
#define SKYBOX_BK "media/SKYBOX/Skybox_BK.png"
#define SKYBOX_LF "media/SKYBOX/Skybox_LF.png"
#define SKYBOX_RT "media/SKYBOX/Skybox_RT.png"
#define SKYBOX_TP "media/SKYBOX/Skybox_TP.png"
#define SKYBOX_BM "media/SKYBOX/Skybox_BM.png"

// Definition der Struktur der Vertices der Skybox
// Position und Texturkoordinate verwenden
struct SB_VERTEX
{
    FLOAT x, y, z;
    FLOAT tu, tv;
};


#define D3DFVF_SBVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)

// Klassendefinition
class CSkyBox
{
    public:

        // die Richtungen der Ebenen
        enum SKY_PLANE { FRONT, BACK, LEFT, RIGHT, TOP, BOTTOM, };

        CSkyBox();
        virtual ~CSkyBox();

        // Skybox erzeugen
        void Create(LPDIRECT3DDEVICE9 lpDevice);
        // Textur fuer die angegebene Seite festlegen
   
        void SetPlane(SKY_PLANE plane, LPDIRECT3DTEXTURE9 lpTexture);

        // Skybox rendern, Position der
        // Kamera uebergeben

        void Render(D3DXVECTOR3 vPosition);

    protected:

        // Textur laden
        LPDIRECT3DTEXTURE9 LoadTexture(LPCSTR lpFilename);

        // Vektor fuer die Zeiger auf die Texturen
      vector<LPDIRECT3DTEXTURE9> m_vecSky;
 
        // Abstand der SkyBox
        float m_DistanceX;
        float m_DistanceY;
        float m_DistanceZ;
       
        // Zeiger auf das Direct3D-Device
        LPDIRECT3DDEVICE9 m_lpD3DDevice;
       
        // Vertex Buffer fuer die Vertices der Skybox
        LPDIRECT3DVERTEXBUFFER9 m_lpVB;
};


Erster Teil aus Skybox.cpp:
Code:

m_vecSky[FRONT]  = LoadTexture(SKYBOX_FR);

    m_vecSky[BACK]   = LoadTexture(SKYBOX_BK);

    m_vecSky[LEFT]   = LoadTexture(SKYBOX_LF);

    m_vecSky[RIGHT]  = LoadTexture(SKYBOX_RT);

    m_vecSky[TOP]    = LoadTexture(SKYBOX_TP);

    m_vecSky[BOTTOM] = LoadTexture(SKYBOX_BM);


Zweiter Teil aus Skybox.cpp:
Code:

// Texturen wie gewohnt laden und Zeiger zurueckgeben
LPDIRECT3DTEXTURE9 CSkyBox::LoadTexture(LPCSTR lpFilename)
{
   MessageBox(0, "Class open", "Information", MB_OK);
    LPDIRECT3DTEXTURE9 lpTexture = NULL;

    D3DXIMAGE_INFO ImageInfo;
   
    // Informationen ueber die Grafik laden
    D3DXGetImageInfoFromFile(lpFilename, &ImageInfo);

    if(FAILED(D3DXCreateTextureFromFileEx(m_lpD3DDevice,
                                          lpFilename,
                                          ImageInfo.Width,
                                          ImageInfo.Height,
                                          1,
                                          0,
                                          D3DFMT_X8R8G8B8,
                                          D3DPOOL_MANAGED,
                                          D3DX_FILTER_NONE,
                                          D3DX_FILTER_NONE,
                                          0,
                                          0,
                                          0,
                                          &lpTexture)))
    {
        MessageBox(0, "Fehler beim Laden der SkyBox-Textur", "Fehler", MB_OK);
    }
   
    return lpTexture;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tinos
Mini JLI'ler



Anmeldedatum: 08.03.2008
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 08.03.2008, 17:59    Titel: Antworten mit Zitat

sry.
das obere Problem ist noch aktuell.
Hatte vergessen die skybox ins einschalten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 08.03.2008, 20:19    Titel: Antworten mit Zitat

reserviere 6 plätze in deinem vektor, bevor du eine textur darin speicherst..... oder füge die texturen mit push_back hinzu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tinos
Mini JLI'ler



Anmeldedatum: 08.03.2008
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 09.03.2008, 08:56    Titel: Antworten mit Zitat

6 Plätze reserviere ich sowieso.

Das mit push_back kenn ich nicht.

Code:

CSkyBox::CSkyBox()
{
    m_DistanceX = 10.0f;
    m_DistanceY = 10.0f; 
    m_DistanceZ = 10.0f; 
   
    m_vecSky.reserve(6);

    m_lpVB = NULL;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tinos
Mini JLI'ler



Anmeldedatum: 08.03.2008
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 09.03.2008, 09:03    Titel: Antworten mit Zitat

Danke. Ich habs hinbekommen.
Hab nach dem Reservieren folgendes gemacht:
Code:

   m_vecSky.assign(6, 0);
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 09.03.2008, 09:06    Titel: Antworten mit Zitat

wie ist die definition für FRONT, BACK...? 0,1,2, dann probiere einfach

CPP:
m_vecSky.push_back( LoadTexture(SKYBOX_FR) );
m_vecSky.push_back( LoadTexture(SKYBOX_BK) );


anstatt

CPP:
m_vecSky[FRONT]  = LoadTexture(SKYBOX_FR);
m_vecSky[BACK]   = LoadTexture(SKYBOX_BK);


uns so weiter (du musst halt die reihenfolge einhalten)
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: 09.03.2008, 17:13    Titel: Antworten mit Zitat

um dir das ganze mal zu erklären, diese Funktionen bei dir machen folgendes:

Arrow reserve() sagt dem Vektor nur, dass später einmal mindestens 6 plätze hinzugefügt werden, es legt den vektor also so, dass 6 Plätze mindestens schon zur Verfügung stehen. Das heißt nicht, dass die ersten 6 Plätze schon ein Objekt beinhalten, sondern nur, dass Platz für diese zukünftigen Objekte geschaffen wird. Es dient lediglich zur Geschwindigkeitsoptimierung.
Arrow assign() erstellt im Gegesatz zu reserve direkt diese Objekte, das heißt es schafft erst Platz (wie reserve()) und erstellt dann für jeden Platz ein neues Objekt, so dass du über den Index-Operator [] auch darauf zugreifen kannst.
Arrow push_back() reserviert und erstellt (wie assign) ein Objekt am Ende des Vektors. Der Unterschied zu assign ist hier, dass du das Objekt auch gleich bestimmen (initialisieren) kannst, und nicht wie bei assign ein standard-objekt erzeugt wird.

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



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 09.03.2008, 17:47    Titel: Antworten mit Zitat

@Maxim:
CPP:
enum SKY_PLANE { FRONT, BACK, LEFT, RIGHT, TOP, BOTTOM, };
...

=>
CPP:
enum SKY_PLANE { FRONT = 0, BACK, LEFT, RIGHT, TOP, BOTTOM, };


CPP:
m_vecSky.push_back(LoadTexture(SKYBOX_FR));
m_vecSky.push_back(LoadTexture(SKYBOX_BK));
m_vecSky.push_back(LoadTexture(SKYBOX_LF));
m_vecSky.push_back(LoadTexture(SKYBOX_RT));
m_vecSky.push_back(LoadTexture(SKYBOX_TP));
m_vecSky.push_back(LoadTexture(SKYBOX_BM));


CPP:
CSkyBox::CSkyBox()
    : m_DistanceX(10.0f), m_DistanceY(10.0f), m_DistanceZ(10.0f), m_vecSky(6), m_lpVB(NULL)
{ }
Initialisierungsliste ... m_vecSky auf 6 Items vorbereiten ...
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