Aktuelle Zeit: 12.05.2024, 14:45

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ich finde mein Mesh nicht
BeitragVerfasst: 26.09.2007, 10:09 
Offline

Registriert: 13.03.2007, 22:45
Beiträge: 65
Hi,

ich habe aus einer Textdatei ein Mesh generiert. Dieses wird aber irgendwie nicht angezeigt (ich kann es nicht finden...).
Woran könnte das liegen? Wo soll ich suchen?
Ich bin auch mal mit der Kamera an die Stelle des ersten Vertex gegangen, da war nichts zu sehen - weit und breit :)

Ich hab im Anhang mal die Textdatei hochgeladen, hier findet ihr das Format der Datei.

Und folgendermaßen wird die Datei geparst:
Code:
// Meshbuffer erstellen
irr::scene::SMeshBuffer* road_meshbuffer = new irr::scene::SMeshBuffer();


// Datei öffnen
std::FILE* road_file = NULL;    //Die Datei
road_file = std::fopen(filepath.c_str(), "r");

if(road_file == NULL)
   CFramework::Get()->RuntimeError("Laden der Map fehlgeschlagen: Die Datei für die Straße konnte nicht geöffnet werden.", "ERROR", "<strong>Pfad:</strong> " + filepath);
       
char road_file_buffer[256];

//Anzahl der Straßen rauslesen
std::fgets(road_file_buffer, 255, road_file);
int road_number_of_roads = atoi(road_file_buffer);
//todo: Support für mehrere Straßen

//Straßennamen auslesen
std::fgets(road_file_buffer, 255, road_file);
std::string road_name = road_file_buffer;

//Texturpfad auslesen
std::fgets(road_file_buffer, 255, road_file);
std::string road_texture = road_file_buffer;
irr::video::ITexture* road_texture_loaded = CFramework::Get()->GetDriver()->getTexture("gfx/maps/western/roads/road2.jpg");

//Opacity (Tranzparenz) auslesen
std::fgets(road_file_buffer, 255, road_file);
std::string road_opacity = road_file_buffer;

//Anzahl der Vertices auslesen
std::fgets(road_file_buffer, 255, road_file);
int road_number_of_vertices = atoi(road_file_buffer);


//Vertices auslesen
std::vector<std::string> vertex_data;

for(int i = 0; i < road_number_of_vertices; ++i)
{
   std::fgets(road_file_buffer, 255, road_file);
   vertex_data = hwf::split_string(road_file_buffer, " ");
   
   if(static_cast<int> (vertex_data.size()) != 8)
    {
      CFramework::Get()->RuntimeError("Laden der Straße: Angaben des " + hwf::intToString(i) + ". Vertex konnten nicht geladen werden", "ERROR", "<strong>Pfad:</strong> " + filepath);
    }
    else
    {
      road_meshbuffer->Vertices.push_back(irr::video::S3DVertex(static_cast<float> (atof(vertex_data[0].c_str())),   // X
                                                   static_cast<float> (atof(vertex_data[1].c_str())),   // Y
                                                   static_cast<float> (atof(vertex_data[2].c_str())),   // Z
                                                   static_cast<float> (atof(vertex_data[5].c_str())),   // NX
                                                   static_cast<float> (atof(vertex_data[6].c_str())),   // NY
                                                   static_cast<float> (atof(vertex_data[7].c_str())),   // NZ
                                                   irr::video::SColor(125, 255, 255, 255),                  // Color
                                                   static_cast<float> (atof(vertex_data[3].c_str())),   // U
                                                   static_cast<float> (atof(vertex_data[4].c_str()))   // V
                                                   ));
    }
}



//Indices auslesen
while(!std::feof(road_file))
{
   std::string current_index;
   char c;
   char tmp_seperator = ' ';

   c = std::fgetc(road_file);
   if(c == tmp_seperator)
   {
      road_meshbuffer->Indices.push_back(atoi(current_index.c_str()));
      current_index = "";
   }
   else
   {
      current_index += c;
   }
}

// Mesh und ScheneNode erstellen
road_meshbuffer->recalculateBoundingBox();
irr::scene::SMesh* road_mesh = new irr::scene::SMesh();
road_mesh->addMeshBuffer(road_meshbuffer);
m_Road = CFramework::Get()->GetSceneManager()->addMeshSceneNode(road_mesh);

// Material
m_Road->setMaterialTexture(0, road_texture_loaded);
m_Road->setMaterialFlag(irr::video::EMF_LIGHTING, false);
m_Road->setMaterialFlag(irr::video::EMF_BACK_FACE_CULLING, true);


Habe ich beim parsen was vergessen / nen fehler gemacht?


Dateianhänge:
Dateikommentar: Die Datei, aus der das mesh erzeugt wurde.
roads.zip [18.18 KiB]
358-mal heruntergeladen
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ich finde mein Mesh nicht
BeitragVerfasst: 26.09.2007, 23:00 
Offline

Registriert: 13.03.2007, 22:45
Beiträge: 65
Kann mir niemand ein paar Hinweise geben?
Wenigstens eine kleine Checkliste, was beim erstellen eines Meshes mit einem Meshbuffer alles zu beachten ist oder schief gehen kann...
Ich bin echt am verzweifeln!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ich finde mein Mesh nicht
BeitragVerfasst: 27.09.2007, 09:42 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Nun, ich habe mich noch nie damit beschäftgt, deswegen kann ich auch nicht wirklich was dazu sagen.

Dinge, die du trotzdem machen könntest:
Ob du beim Parsen Fehler gemacht hast, solltest du ausschließen können, indem du in dem geposteten Code einfach an der Stelle, an dem Vertex/Index hinzugefügt wird, eine entsprechende Debugmeldung ausgibst, und das Dateiformat sieht ja auch nicht sonderlich komplex aus.

Ansonsten könntest du gucken, ob der MeshBuffer selbst korrekt ist, indem du ihn nochmal ausliest.

Und letztenendes kannst du dir in Irrlicht selbst ein paar Debugmeldungen setzen, um zu gucken, ob irgendetwas gerendert wird und du es nur siehst.

Und wenn du das alles schon gemacht hast, kP :p

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de