Skip to content
This repository has been archived by the owner on Jul 24, 2020. It is now read-only.

Commit

Permalink
Materials: Only one per object
Browse files Browse the repository at this point in the history
  • Loading branch information
Bjwebb committed Feb 14, 2008
1 parent 1247605 commit 22683b2
Show file tree
Hide file tree
Showing 9 changed files with 431 additions and 26 deletions.
2 changes: 2 additions & 0 deletions btree.mtl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Blender3D MTL File: <memory>
# Material Count: 0
115 changes: 94 additions & 21 deletions loadworld.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,69 @@ short readstr(FILE *f, char *string) { // Read In A String
return 0;
}

OBJECT LoadObj(char* worldfile) {
OBJECT LoadMtl(char* mtlfile, OBJECT tmpobj) {
FILE *filein; // File To Work With
filein = fopen(worldfile, "rt"); // Open Our File
filein = fopen(mtlfile, "rt"); // Open Our File
float ar=0, ag=0, ab=0, dr=0, dg=0, db=0, sr=0, sg=0, sb=0;
float ns=0;
while (true) {
char oneline[255];
char t1[255], t2[255], t3[255], t4[255];
float f2=0, f3=0, f4=0;
if (readstr(filein,oneline)) break;
int num = sscanf(oneline, "%s %f %f %f", t1, &f2, &f3, &f4);
// if (strcmp(t1,"newmtl")) printf(t2);
if (strcmp(t1,"Ka") == 0) {
ar = f2;
ag = f3;
ab = f4;
}
if (strcmp(t1,"Kd") == 0) {
dr = f2;
dg = f3;
db = f4;
}
if (strcmp(t1,"Ks") == 0) {
sr = f2;
sg = f3;
sb = f4;
}
if (strcmp(t1,"Ns") == 0) {
ns = f2;
}
}
fclose(filein);
tmpobj.mtl.ambient[0] = ar;
tmpobj.mtl.ambient[1] = ag;
tmpobj.mtl.ambient[2] = ab;
tmpobj.mtl.ambient[3] = 1;
tmpobj.mtl.diffuse[0] = dr;
tmpobj.mtl.diffuse[1] = dg;
tmpobj.mtl.diffuse[2] = db;
tmpobj.mtl.diffuse[3] = 1;
tmpobj.mtl.specular[0] = sr;
tmpobj.mtl.specular[1] = sg;
tmpobj.mtl.specular[2] = sb;
tmpobj.mtl.specular[3] = 1;
tmpobj.mtl.shininess[0] = ns;

return tmpobj;
}

OBJECT LoadObj(char* objfile) {
FILE *filein; // File To Work With
filein = fopen(objfile, "rt"); // Open Our File

char* mtllib;
char oneline[255];
char tmp1[255];
char tmp2[255];
readstr(filein,oneline);
sscanf(oneline, "%s %s", tmp1, tmp2);
if (strcmp(tmp1, "mtllib") == 0) {
mtllib = tmp2;
}

int numvert = 4000;
char x[10], y[10], z[10];
int numface = 4*4000;
Expand All @@ -35,13 +94,11 @@ OBJECT LoadObj(char* worldfile) {
int vertloop = 0;
while (vertloop < numvert) // Loop Through All The Vertices
{
char oneline[255];
if (readstr(filein,oneline)) break;
char tmp[255];
sscanf(oneline, "%s ", tmp);
if (strcmp(tmp, "v") == 0) {
sscanf(oneline, "%s %s %s %s", tmp, &x, &y, &z);
// printf("%d %s: %s", vertloop, tmp, oneline);
// Store Values Into Respective Vertices
vertex[vertloop].x = atof(x);
vertex[vertloop].y = atof(y);
Expand All @@ -54,13 +111,11 @@ OBJECT LoadObj(char* worldfile) {
VERTEX* normal = new VERTEX[numvert];
int normloop = 0;
while (normloop < numvert) {
char oneline[255];
if (readstr(filein,oneline)) break;
char tmp[255];
sscanf(oneline, "%s ", tmp);
if (strcmp(tmp, "vn") == 0) {
sscanf(oneline, "%s %s %s %s", tmp, &x, &y, &z);
// printf("%d %s: %s", normloop, tmp, oneline);
// Store Values Into Respective Vertices
normal[normloop].x = atof(x);
normal[normloop].y = atof(y);
Expand All @@ -72,20 +127,18 @@ OBJECT LoadObj(char* worldfile) {


fclose(filein);
filein = fopen(worldfile, "rt");
filein = fopen(objfile, "rt");

FACE* face = new FACE[numface];
int faceloop = 0;
while (faceloop < numface) {
char v1[10], v2[10], v3[10], v4[10];
char oneline[255];
if (readstr(filein,oneline)) break;
char tmp[255];
sscanf(oneline, "%s", tmp);
if (strcmp(tmp, "f") == 0) {
if (sscanf(oneline, "%s %s %s %s %s", tmp, &v1, &v2, &v3, &v4) == 4) {
strcpy (v4, v3);
// printf("Test %s \n", v4);
}
// Store Values Into Respective Vertices
int test1, test2;
Expand All @@ -110,7 +163,6 @@ OBJECT LoadObj(char* worldfile) {
face[faceloop].v = atoi(v3);
}
faceloop++;
// printf("%s\n", v4);
if (sscanf(v4, "%d//%d", &test1, &test2) == 2) {
face[faceloop].v = test1;
}
Expand All @@ -122,9 +174,9 @@ OBJECT LoadObj(char* worldfile) {
v4[i] = '0';
}
v4[9] = '\0'; // TODO make this more pretty; moreover, why do they carry on?
printf("Face: %d %d %d %d\n", face[faceloop-4].v, face[faceloop-3].v, face[faceloop-2].v, face[faceloop-1].v);
// printf("Face: %d %d %d %d\n", face[faceloop-4].v, face[faceloop-3].v, face[faceloop-2].v, face[faceloop-1].v);
}
else if (faceloop != 0) { break; }
//else if (faceloop != 0) { break; }
}
fclose(filein);

Expand Down Expand Up @@ -153,6 +205,8 @@ OBJECT LoadObj(char* worldfile) {
for (int i=0; i<tmpobj.numIndices; i++) {
tmpobj.Indices[i] = face[i].v - 1;
}

tmpobj = LoadMtl(tmp2, tmpobj);
// int evil = 0;
// int asfd = 8/evil;
return tmpobj;
Expand All @@ -165,7 +219,26 @@ void DrawWorld() {
glRotatef(Objects[i].rot.x, 1, 0, 0);
glRotatef(Objects[i].rot.y, 0, 1, 0);
glRotatef(Objects[i].rot.z, 0, 0, 1);
glColor3fv( blue ); // TODO

if (i == 2) {
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, Objects[i].mtl.ambient);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Objects[i].mtl.diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, Objects[i].mtl.specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, Objects[i].mtl.shininess);
glColor3fv(Objects[i].mtl.diffuse);
}
else {
GLfloat a[] = {0,0,0,1};
GLfloat d[] = {0.8f,0.8f,0.8f,1};
GLfloat s[] = {0.5f,0.5f,0.5f};
GLfloat sh[] = {100};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, a);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, d);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, s);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, sh);
glColor3fv( blue );
}

glVertexPointer( 3, GL_FLOAT, sizeof(WVector), Objects[i].Vertices);
glNormalPointer( GL_FLOAT, sizeof(WVector), Objects[i].Normals );
glDrawElements( GL_QUADS, Objects[i].numIndices, GL_UNSIGNED_INT, Objects[i].Indices );
Expand All @@ -182,24 +255,24 @@ void SetupWorld(char* worldfile) {
char tmp2[255];
readstr(filein,oneline);
sscanf(oneline, "%s %s", tmp1, tmp2);
printf("numObjects: %s\n", tmp2);
// printf("numObjects: %s\n", tmp2);
if (strcmp(tmp1, "numObjects") == 0) numObjects = atoi(tmp2);
printf("numObjects: %d\n\n", numObjects);
// printf("numObjects: %d\n\n", numObjects);
Objects = new OBJECT[numObjects];

int i = 0;
while (i < numObjects) {
if (readstr(filein,oneline)) break;
sscanf(oneline, "%s", tmp1);
printf("%s", oneline);
// printf("%s", oneline);
if (strcmp(tmp1, "Object") == 0) {
float x=0,y=0,z=0,rx=0,ry=0,rz=0,rangle=0;
printf("Count: %d\n", sscanf(oneline, "%s %s %f %f %f %f %f %f", tmp1, tmp2, &x, &y, &z, &rx, &ry, &rz));
printf("Test: %s\n", tmp1);
printf("Object: %s\n", tmp2);
printf("Count: %d\n", sscanf(oneline, "%s %s %f %f %f %f %f %f", tmp1, tmp2, &x, &y, &z, &rx, &ry, &rz));
// printf("Test: %s\n", tmp1);
// printf("Object: %s\n", tmp2);
Objects[i] = LoadObj(tmp2);
printf("%f %f %f\n\n", x, y, z);
printf("%f %f %f\n\n", rx, ry, rz);
// printf("%f %f %f\n\n", x, y, z);
// printf("%f %f %f\n\n", rx, ry, rz);
Objects[i].pos.x = x;
Objects[i].pos.y = y;
Objects[i].pos.z = z;
Expand Down
8 changes: 8 additions & 0 deletions main.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,15 @@ struct WVector
// GLfloat r,g,b;
};

struct WMaterial {
GLfloat ambient[4];
GLfloat diffuse[4];
GLfloat specular[4];
GLfloat shininess[1];
};

typedef struct tagOBJECT {
WMaterial mtl;
WVector pos;
WVector rot;
float angle;
Expand Down
2 changes: 2 additions & 0 deletions monkey.mtl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Blender3D MTL File: <memory>
# Material Count: 0
2 changes: 2 additions & 0 deletions toadstool.mtl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Blender3D MTL File: tree.blend
# Material Count: 0
133 changes: 133 additions & 0 deletions toadstool.obj
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
# Blender3D v245 OBJ File: tree.blend
# www.blender3d.org
mtllib toadstool.mtl
o Sphere
v 0.919239 -0.707107 0.000000
v 1.000000 0.000000 -0.000000
v 0.707107 0.707107 -0.000000
v -0.000000 1.000000 -0.000000
v 0.500000 0.707107 0.500000
v 0.707107 0.000000 0.707107
v 0.650000 -0.707107 0.650000
v -0.000000 -0.707107 0.919239
v -0.000000 0.000000 1.000000
v -0.000000 0.707107 0.707107
v -0.500000 0.707107 0.500000
v -0.707107 0.000000 0.707107
v -0.650000 -0.707107 0.650000
v -0.919239 -0.707107 -0.000000
v -1.000000 -0.000000 -0.000000
v -0.707107 0.707107 -0.000000
v -0.500000 0.707107 -0.500000
v -0.707107 -0.000000 -0.707107
v -0.650000 -0.707107 -0.650000
v 0.000000 -0.707107 -0.919239
v 0.000000 -0.000000 -1.000000
v 0.000000 0.707107 -0.707107
v 0.500000 0.707107 -0.500000
v 0.707107 -0.000000 -0.707107
v 0.650000 -0.707107 -0.650000
v 0.353553 -0.707107 0.000000
v 0.250000 -0.707107 0.250000
v -0.000000 -0.707107 0.353553
v -0.250000 -0.707107 0.250000
v -0.353553 -0.707107 -0.000000
v -0.250000 -0.707107 -0.250000
v 0.000000 -0.707107 -0.353553
v 0.250000 -0.707107 -0.250000
v 0.250000 -2.107107 0.250000
v 0.353553 -2.107107 0.000000
v -0.000000 -2.107107 0.353553
v -0.250000 -2.107107 0.250000
v -0.353553 -2.107107 -0.000000
v -0.250000 -2.107107 -0.250000
v 0.000000 -2.107107 -0.353553
v 0.250000 -2.107107 -0.250000
v 0.000000 -2.107107 0.000000
vn 0.377965 0.912487 0.156558
vn 0.862856 0.357407 0.357407
vn 0.918779 -0.104937 0.380571
vn 0.380571 -0.104937 0.918779
vn 0.357407 0.357407 0.862856
vn 0.156558 0.912487 0.377964
vn -0.156558 0.912487 0.377964
vn -0.357407 0.357407 0.862856
vn -0.380571 -0.104937 0.918779
vn -0.918779 -0.104937 0.380570
vn -0.862856 0.357407 0.357407
vn -0.377965 0.912487 0.156558
vn -0.377964 0.912487 -0.156558
vn -0.862856 0.357407 -0.357407
vn -0.918779 -0.104937 -0.380571
vn -0.380570 -0.104937 -0.918779
vn -0.357407 0.357407 -0.862856
vn -0.156558 0.912487 -0.377964
vn 0.156558 0.912487 -0.377964
vn 0.357407 0.357407 -0.862856
vn 0.380571 -0.104937 -0.918779
vn 0.918779 -0.104937 -0.380570
vn 0.862856 0.357407 -0.357407
vn 0.377965 0.912487 -0.156558
vn 0.000000 -1.000000 0.000000
vn 0.923880 -0.000000 0.382683
vn 0.382683 -0.000000 0.923880
vn -0.382684 -0.000000 0.923879
vn -0.923880 -0.000000 0.382683
vn -0.923880 0.000000 -0.382683
vn -0.382683 0.000000 -0.923880
vn 0.382684 0.000000 -0.923879
vn 0.923880 0.000000 -0.382683
vn 0.000001 -1.000000 0.000000
vn 0.000000 -1.000000 0.000001
vn -0.000001 -1.000000 0.000000
vn -0.000000 -1.000000 -0.000001
usemtl (null)
s off
f 4//1 5//1 3//1
f 3//2 5//2 6//2 2//2
f 7//3 1//3 2//3 6//3
f 6//4 9//4 8//4 7//4
f 5//5 10//5 9//5 6//5
f 4//6 10//6 5//6
f 4//7 11//7 10//7
f 10//8 11//8 12//8 9//8
f 9//9 12//9 13//9 8//9
f 12//10 15//10 14//10 13//10
f 11//11 16//11 15//11 12//11
f 4//12 16//12 11//12
f 4//13 17//13 16//13
f 16//14 17//14 18//14 15//14
f 15//15 18//15 19//15 14//15
f 18//16 21//16 20//16 19//16
f 17//17 22//17 21//17 18//17
f 4//18 22//18 17//18
f 4//19 23//19 22//19
f 22//20 23//20 24//20 21//20
f 21//21 24//21 25//21 20//21
f 1//22 25//22 24//22 2//22
f 23//23 3//23 2//23 24//23
f 4//24 3//24 23//24
f 1//25 7//25 27//25 26//25
f 7//25 8//25 28//25 27//25
f 8//25 13//25 29//25 28//25
f 13//25 14//25 30//25 29//25
f 14//25 19//25 31//25 30//25
f 19//25 20//25 32//25 31//25
f 20//25 25//25 33//25 32//25
f 25//25 1//25 26//25 33//25
f 26//26 27//26 34//26 35//26
f 27//27 28//27 36//27 34//27
f 28//28 29//28 37//28 36//28
f 29//29 30//29 38//29 37//29
f 30//30 31//30 39//30 38//30
f 31//31 32//31 40//31 39//31
f 32//32 33//32 41//32 40//32
f 33//33 26//33 35//33 41//33
f 35//34 34//34 42//34
f 34//35 36//35 42//35
f 36//35 37//35 42//35
f 37//36 38//36 42//36
f 38//36 39//36 42//36
f 39//37 40//37 42//37
f 40//37 41//37 42//37
f 41//34 35//34 42//34
22 changes: 22 additions & 0 deletions tree.mtl
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Blender3D MTL File: tree.blend
# Material Count: 2
newmtl Material.002
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.000000 0.800000 0.032952
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2


newmtl Material.001
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.333305 0.144543 0.038520
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2


Loading

0 comments on commit 22683b2

Please sign in to comment.