update .mtl loader (Ke, Ns, map_Ka, map_Kd, map_Ks, map_Ns)
This commit is contained in:
8
test.cc
8
test.cc
@@ -8,7 +8,7 @@ main(
|
|||||||
int argc,
|
int argc,
|
||||||
char **argv)
|
char **argv)
|
||||||
{
|
{
|
||||||
std::string inputfile = "cornell_box.obj";
|
std::string inputfile = "test.obj";
|
||||||
std::vector<tinyobj::shape_t> shapes;
|
std::vector<tinyobj::shape_t> shapes;
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
@@ -45,6 +45,12 @@ main(
|
|||||||
printf(" material.Kd = (%f, %f ,%f)\n", shapes[i].material.diffuse[0], shapes[i].material.diffuse[1], shapes[i].material.diffuse[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.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.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());
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -237,10 +237,19 @@ exportFaceGroupToShape(
|
|||||||
|
|
||||||
|
|
||||||
void InitMaterial(material_t& material) {
|
void InitMaterial(material_t& material) {
|
||||||
material.name = material.ambient_texname = material.diffuse_texname = material.specular_texname = "";
|
material.name = "";
|
||||||
|
material.ambient_texname = "";
|
||||||
|
material.diffuse_texname = "";
|
||||||
|
material.specular_texname = "";
|
||||||
|
material.normal_texname = "";
|
||||||
for (int i = 0; i < 3; i ++) {
|
for (int i = 0; i < 3; i ++) {
|
||||||
material.ambient[i] = material.diffuse[i] = material.specular[i] = material.transmittance[i] = 0.0;
|
material.ambient[i] = 0.f;
|
||||||
|
material.diffuse[i] = 0.f;
|
||||||
|
material.specular[i] = 0.f;
|
||||||
|
material.transmittance[i] = 0.f;
|
||||||
|
material.emission[i] = 0.f;
|
||||||
}
|
}
|
||||||
|
material.shininess = 1.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string LoadMtl (
|
std::string LoadMtl (
|
||||||
@@ -346,7 +355,64 @@ std::string LoadMtl (
|
|||||||
material.specular[2] = b;
|
material.specular[2] = b;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Ignore unknown command.
|
|
||||||
|
// emission
|
||||||
|
if(token[0] == 'K' && token[1] == 'e' && isSpace(token[2])) {
|
||||||
|
token += 2;
|
||||||
|
float r, g, b;
|
||||||
|
parseFloat3(r, g, b, token);
|
||||||
|
material.emission[0] = r;
|
||||||
|
material.emission[1] = g;
|
||||||
|
material.emission[2] = b;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// shininess
|
||||||
|
if(token[0] == 'N' && token[1] == 's' && isSpace(token[2])) {
|
||||||
|
token += 2;
|
||||||
|
material.shininess = parseFloat(token);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ambient texture
|
||||||
|
if ((0 == strncmp(token, "map_Ka", 6)) && isSpace(token[6])) {
|
||||||
|
token += 7;
|
||||||
|
material.ambient_texname = token;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// diffuse texture
|
||||||
|
if ((0 == strncmp(token, "map_Kd", 6)) && isSpace(token[6])) {
|
||||||
|
token += 7;
|
||||||
|
material.diffuse_texname = token;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// specular texture
|
||||||
|
if ((0 == strncmp(token, "map_Ks", 6)) && isSpace(token[6])) {
|
||||||
|
token += 7;
|
||||||
|
material.specular_texname = token;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// normal texture
|
||||||
|
if ((0 == strncmp(token, "map_Ns", 6)) && isSpace(token[6])) {
|
||||||
|
token += 7;
|
||||||
|
material.normal_texname = token;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unknown parameter
|
||||||
|
char* _space = strchr(token, ' ');
|
||||||
|
if(!_space) {
|
||||||
|
_space = strchr(token, '\t');
|
||||||
|
}
|
||||||
|
if(_space) {
|
||||||
|
*_space = '\0';
|
||||||
|
std::string key = token;
|
||||||
|
std::string value = _space + 1;
|
||||||
|
material.unknown_parameter.insert(std::pair<std::string, std::string>(key, value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return err.str();
|
return err.str();
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
namespace tinyobj {
|
namespace tinyobj {
|
||||||
|
|
||||||
@@ -19,10 +20,14 @@ typedef struct
|
|||||||
float diffuse[3];
|
float diffuse[3];
|
||||||
float specular[3];
|
float specular[3];
|
||||||
float transmittance[3];
|
float transmittance[3];
|
||||||
|
float emission[3];
|
||||||
|
float shininess;
|
||||||
|
|
||||||
std::string ambient_texname;
|
std::string ambient_texname;
|
||||||
std::string diffuse_texname;
|
std::string diffuse_texname;
|
||||||
std::string specular_texname;
|
std::string specular_texname;
|
||||||
|
std::string normal_texname;
|
||||||
|
std::map<std::string, std::string> unknown_parameter;
|
||||||
} material_t;
|
} material_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|||||||
Reference in New Issue
Block a user