JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Problem bei Höhenanpassung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 12.07.2004, 19:15    Titel: Problem bei Höhenanpassung Antworten mit Zitat

Hallo!

Ich bin gerade beim Terrain wo die Höhe der Kamera an das terrain angepasst wird. Ich habe den Code aus dem Beispiel in mein Projekt eingebaut. Nur leider stürzt das Programm immer ab wenn ich mich über dem terrain befinde. Ich habe herausgefunden dass das problem hier liegt:
Code:

// Header
float** m_Height;

// Source
p1 = m_Height[z+1][x];         
p2 = m_Height[z+1][x+1];       
p3 = m_Height[z  ][x+1];


Jedoch habe ich keine Ahnung was daran Falsch ist ( obwohl mir das ** nicht ganz klar ist).

THX
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 12.07.2004, 19:28    Titel: Antworten mit Zitat

ich habe jetzt noch gemerkt das ich vergessen habe es zu initialisieren, also hab ich einfach mal
Code:
m_Height = new float*[TERRAIN_SIZE_Y];
in den Konstruktor geschrieben. Geht leider immernoch nicht.

EDIT:
Code:

// Zeiger auf die Pixel anlegen
    BYTE* Pixels = (BYTE*)LockedRect.pBits;

   m_Height = new float*[TERRAIN_SIZE_Y];

    for(int a=0;a<TERRAIN_SIZE_Y;a++)
    {
        m_Height[a] = new float[TERRAIN_SIZE_X];
    }

    for(a=0;a<TERRAIN_SIZE_Y;a++)
    {
        for(int b=0;b<TERRAIN_SIZE_X;b++)
        {
            m_Height[(TERRAIN_SIZE_Y-1)-a][b] = ((float)Pixels[a * nPitch + b]) * 0.1f;
        }
    }


Das hab ich auch übersehen und noch hinzugefügt.


Zuletzt bearbeitet von Beni5 am 12.07.2004, 19:53, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.07.2004, 19:40    Titel: Antworten mit Zitat

schau dir doch nochmal genau das Beispiel an. Da funktioniert es doch ganz ut. Solltes das mit deinem eigenen Programm nochmal vergleichen. Und wenns Abstürtzt: Programm im Fenstermodus starten und debuggen!
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 12.07.2004, 20:04    Titel: Antworten mit Zitat

Laut Debugger liegt es an m_Height. ( Fehler: Ausdruck kann nicht ausgewertet werden)

Vielleicht liegts ja daran:

Code:

   float** CTerrain::GetHeight(void)
   {
      return m_Height;
   }


So übergebe ich die Höhen von dder Terrain Klasse zur Scene Klasse. ( m_Height = Terrain.GetHeight(); )
Muss ich das anders konvertieren?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 15:38    Titel: Antworten mit Zitat

Wieso hilft mir denn niemand Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 15:43    Titel: Antworten mit Zitat

Was passiert denn genau?
Und wo tritt das Problem auf (in welcher Zeile)?
Ich vermute mal, dass du einen Pointer dereferenzierst der auf 0 Zeigt.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 15:47    Titel: Antworten mit Zitat

Sobald ich Werte aus dem 2 dimensionalen Array m_Height abfragen will.

Code:
m_Height[z+1][x];
stürzt das Progg ab. (steht oben)
Vielleicht übergebe ich sie falsch an die andere Klasse? Stimmt die obere Funktion? Vielleicht habe ich etwas im Beispiel noch nicht entdeckt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 16:02    Titel: Antworten mit Zitat

Du kannst im Debugger ja überprüfen ob die von GetHeight zurückgegebene addresse stimmt.
Vielleicht ließt du mit m_Height[z+1][x]; auch über das Array hinaus. Musst mal gucken ob der Indedx noch im Bereich des Arrays liegt.
Liegt die Zeile "m_Height[z+1][x];" in der unten angegebenen Schleife?

Vermutlich ist m_Height ungültig, dann machst du bei der Übergabe was falsch.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 16:05    Titel: Antworten mit Zitat

ich kann auch [0][0] schreiben, ja es passiert gleich beim ersten mal, ich denke auch das sie nur NULL enthält. Übrigens geht es in der terrain Klasse problemlos die Werte abzufragen, habs mit der MessageBox getstet, also es muss an der Übergabe liegen. Christian hat sich's leicht gemacht und die terrain Klasse in die Scene eingebaut , so ersparte er sich das, doch mich würde das jetzt sehr interessieren wie ich das von Zeigern verseuchte m_Height richtig übergeben kann. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 16:18    Titel: Antworten mit Zitat

Überprüf das doch mit dem Debugger, also ob die Addresse von m_Height und die übergebene Addresse sich ändern/verschieden sind.
Ist da sonst noch Code der mit m_Height arbeitet und vielleicht was verändert?

EDIT: Diese Programm funktioniert bei mir:
Code:

float **ppHeight   =0;
float **ThePointer   = 0;

float ** GetHeight()
{
   return ppHeight;
}

void InitHeight()
{
   ppHeight = new float*[100];

   for(int i=0;i<100;i++)
   {
      ppHeight[i] = new float[10];

      for(int v=0;v<10;v++)
      {
         ppHeight[i][v] = v;
      }
   }
}

int main(int argc, char* argv[])
{
   InitHeight();
   ThePointer = GetHeight();
   int x = ThePointer[3][3] = 0;
   return 0;
}

_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 16:31    Titel: Antworten mit Zitat

Komisch bei mir sind die Adressen verschieden :-/ keine Ahnung was da abläuft...
Zudem denke ich es geht beidir nur weil du ThePointer[3][3] mit 0 initialisierst, das kann ich beim übergebenen wert auch noch.. Das Problem ist das ich ihn net abfragen kann , bzw. er garnet existiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 16:39    Titel: Antworten mit Zitat

Hast du MSVC++ 6.0?
Ich hab nämlich mit dem Visual Studio kompiliert.

Du könntest sonst ja versuchen n 3-fach Pointer zu verwenden:

Code:

float*** ThePointer=0;

float*** GetHeight()
{
    return &ppHeight;
}

int main(...)
{
...
int x = (*ThePointer)[3][3];
}


Aber ka ob das was bringt Razz

EDIT:
Zur Not kannst du auch m_Height public machen und direkt drauf zugreifen.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 17:11    Titel: Antworten mit Zitat

Zu spät... Hab jetzt die Terrain Klasse mit der Scene vershcmolzen. Die Terrain Klasse ist find ich eh zu klein für ne eigene Klasse und unterscheidet sich ja auch nicht von den Primitiven die in der Scene gerendert werden.

Vielen Dank Kampfhund das du mir geholfen hast ! Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.07.2004, 17:24    Titel: Antworten mit Zitat

Ok, Hauptsache es klappt Smile
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL 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