26
kwi
08

Wczytywanie modelu 3D z pliku OBJ

Napisałem dzisiaj proste wczytywanie współrzędnych wierzchołków oraz tzw. normalnych wierzchołków z pliku OBJ. Oczywiście plik OBJ, z takimi danymi wyeksportowanymi z programów typu 3DS MAX, Blender i pokrewnych. Budowa tego pliku jest bardzo prosta:

  • nagłówek z info o programie, który utworzył plik i inne tego typu
  • współrzędne wierzchołków
  • współrzędne wierzchóków tekstur
  • współrzędne normalnych wierzchołków
  • powierzchnie

Interesowały mnie głównie rzewczy wymienione we wstępnie, ale kod bardzo łatwo rozszerzyć. Poniżej najprostszy kod, jaki można sobie wyobrazić w tej sytuacji. Na poczet większych projektów wygodnie byłoby to opakować w jakieś klasy/funkcje, aby korzystało się wygodniej.

std::ifstream in( “apple1.obj” );
std::string buffer;
std::string tmp;
float v1;
float v2;
float v3;
std::string tbl[3];
while( !in.eof() )
{
std::getline( in, buffer );
std::istringstream line( buffer );
std::string ch = buffer.substr( 0, 2 );

if( ch == “v ” )
{
line >> tmp >> tbl[0] >> tbl[1] >> tbl[2];
v1 = atof( tbl[0].c_str() );
v2 = atof( tbl[1].c_str() );
v3 = atof( tbl[2].c_str() );

std::cout << “wierzcholki v1: ” << v1 << ” v2: ” << v2 << ” v3: ” << v3 << std::endl;
}
else if( ch == “vn” )
{
line >> tmp >> tbl[0] >> tbl[1] >> tbl[2];
v1 = atof( tbl[0].c_str() );
v2 = atof( tbl[1].c_str() );
v3 = atof( tbl[2].c_str() );

std::cout << “normalne v1: ” << v1 << ” v2: ” << v2 << ” v3: ” << v3 << std::endl;
}
}

Wypadałoby dołączyć oczywiście odpowiednie nagłówki :)


0 Odpowiedzi do “Wczytywanie modelu 3D z pliku OBJ”


  1. Brak komentarzy

Napisz odpowiedź