GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - Ilink/tinyobjloader: Tiny but powerful single file wavefront obj loader

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

15 Commits
15 Commits

Folders and files

NameName
Last commit message
Last commit date
obj
obj
 
 
README.md
README.md
 
 
cornell_box.mtl
cornell_box.mtl
 
 
cornell_box.obj
cornell_box.obj
 
 
premake4.lua
premake4.lua
 
 
test.cc
test.cc
 
 
tiny_obj_loader.cc
tiny_obj_loader.cc
 
 
tiny_obj_loader.h
tiny_obj_loader.h
 
 

Repository files navigation

tinyobjloader

Tiny but poweful single file wavefront obj loader written in C++. no dependency except for C++ STL. Good for embedding .obj loader to your renderer ;-)

Features

  • Vertex
  • Texcoord
  • Normal
  • Material
    • Unknown material attributes are treated as key-value.

Notes

Polygon is converted into triangle.

Usage

std::string inputfile = "cornell_box.obj";
std::vector<tinyobj::shape_t> shapes;

std::string err = tinyobj::LoadObj(shapes, inputfile.c_str());

if (!err.empty()) {
  std::cerr << err << std::endl;
}

std::cout << "# of shapes : " << shapes.size() << std::endl;

for (size_t i = 0; i < shapes.size(); i++) {
  printf("shape[%ld].name = %s\n", i, shapes[i].name.c_str());
  printf("shape[%ld].indices: %ld\n", i, shapes[i].mesh.indices.size());
  assert((shapes[i].mesh.indices.size() % 3) == 0);
  for (size_t f = 0; f < shapes[i].mesh.indices.size(); f++) {
    printf("  idx[%ld] = %d\n", f, shapes[i].mesh.indices[f]);
  }

  printf("shape[%ld].vertices: %ld\n", i, shapes[i].mesh.positions.size());
  assert((shapes[i].mesh.positions.size() % 3) == 0);
  for (size_t v = 0; v < shapes[i].mesh.positions.size() / 3; v++) {
    printf("  v[%ld] = (%f, %f, %f)\n", v,
      shapes[i].mesh.positions[3*v+0],
      shapes[i].mesh.positions[3*v+1],
      shapes[i].mesh.positions[3*v+2]);
  }

  printf("shape[%ld].material.name = %s\n", i, shapes[i].material.name.c_str());
  printf("  material.Ka = (%f, %f ,%f)\n", shapes[i].material.ambient[0], shapes[i].material.ambient[1], shapes[i].material.ambient[2]);
  printf("  material.Kd = (%f, %f ,%f)\n", shapes[i].material.diffuse[0], shapes[i].material.diffuse[1], shapes[i].material.diffuse[2]);
  printf("  material.Ks = (%f, %f ,%f)\n", shapes[i].material.specular[0], shapes[i].material.specular[1], shapes[i].material.specular[2]);
  printf("  material.Tr = (%f, %f ,%f)\n", shapes[i].material.transmittance[0], shapes[i].material.transmittance[1], shapes[i].material.transmittance[2]);
  printf("  material.Ke = (%f, %f ,%f)\n", shapes[i].material.emission[0], shapes[i].material.emission[1], shapes[i].material.emission[2]);
  printf("  material.Ns = %f\n", shapes[i].material.shininess);
  printf("  material.map_Ka = %s\n", shapes[i].material.ambient_texname.c_str());
  printf("  material.map_Kd = %s\n", shapes[i].material.diffuse_texname.c_str());
  printf("  material.map_Ks = %s\n", shapes[i].material.specular_texname.c_str());
  printf("  material.map_Ns = %s\n", shapes[i].material.normal_texname.c_str());
  std::map<std::string, std::string>::iterator it(shapes[i].material.unknown_parameter.begin());
  std::map<std::string, std::string>::iterator itEnd(shapes[i].material.unknown_parameter.end());
  for (; it != itEnd; it++) {
    printf("  material.%s = %s\n", it->first.c_str(), it->second.c_str());
  }
  printf("\n");
}

About

Tiny but powerful single file wavefront obj loader

Resources

Readme
Activity

Stars

0 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.