worked a little on OBJ parsing

This commit is contained in:
Anselme 2015-07-06 18:22:45 +02:00
parent 009894ca3b
commit 0872b425b1
5 changed files with 88 additions and 67 deletions

View File

@ -13,7 +13,7 @@ void BasicModule::render(Camera* myCamera)
shader->bind();
bindModule();
for(Entity* e : entities)
e->draw(myCamera->getViewMatrix(), myCamera->getProjectionMatrix());
e->draw(myCamera->getViewMatrix(), myCamera->getProjectionMatrix(), NULL);
}

View File

@ -1822,77 +1822,61 @@ usemtl steel
s 0
f 3/1/1 1/2/2 2/3/3
g Triangle Tool 20
usemtl steel
f 2/4/4 4/5/5 5/6/6
f 2/7/7 5/8/8 3/9/9
g Triangle Tool 21
usemtl steel
f 8/10/10 6/11/11 7/12/12
f 4/13/13 6/14/14 8/15/15
f 4/16/16 8/17/17 9/18/18
f 4/19/19 9/20/20 5/21/21
g Triangle Tool 22
usemtl steel
f 10/22/22 9/23/23 8/24/24
f 8/25/25 7/26/26 11/27/27
f 8/28/28 11/29/29 10/30/30
g Triangle Tool 19 - Mirror
usemtl steel
f 3/31/31 12/32/32 1/33/33
g Triangle Tool 20 - Mirror
usemtl steel
f 12/34/34 5/35/35 13/36/36
f 12/37/37 3/38/38 5/39/39
g Triangle Tool 21 - Mirror
usemtl steel
f 16/40/40 15/41/41 14/42/42
f 13/43/43 16/44/44 14/45/45
f 13/46/46 9/47/47 16/48/48
f 13/49/49 5/50/50 9/51/51
g Triangle Tool 22 - Mirror
usemtl steel
f 10/52/52 16/53/53 9/54/54
f 16/55/55 11/56/56 15/57/57
f 16/58/58 10/59/59 11/60/60
g Triangle Tool 19 - Mirror
usemtl steel
s 1
f 17/61/61 2/62/62 1/63/63
g Triangle Tool 20 - Mirror
usemtl steel
f 2/64/64 18/65/65 4/66/66
f 2/67/67 17/68/68 18/69/69
g Triangle Tool 21 - Mirror
usemtl steel
f 20/70/70 19/71/71 6/72/72
f 4/73/73 20/74/74 6/75/75
f 4/76/76 21/77/77 20/78/78
f 4/79/79 18/80/80 21/81/81
g Triangle Tool 22 - Mirror
usemtl steel
f 22/82/82 20/83/83 21/84/84
f 20/85/85 23/86/86 19/87/87
f 20/88/88 22/89/89 23/90/90
g Triangle Tool 19 - Mirror - Mirror
usemtl steel
f 17/91/91 1/92/92 12/93/93
g Triangle Tool 20 - Mirror - Mirror
usemtl steel
f 12/94/94 24/95/95 18/96/96
f 12/97/97 18/98/98 17/99/99
g Triangle Tool 21 - Mirror - Mirror
usemtl steel
f 26/100/100 14/101/101 25/102/102
f 24/103/103 14/104/104 26/105/105
f 24/106/106 26/107/107 21/108/108
f 24/109/109 21/110/110 18/111/111
g Triangle Tool 22 - Mirror - Mirror
usemtl steel
f 22/112/112 21/113/113 26/114/114
f 26/115/115 25/116/116 23/117/117
f 26/118/118 23/119/119 22/120/120
g Triangle Tool 23
usemtl steel
s 2
f 29/121/121 28/122/122 27/123/123
f 30/124/124 29/125/125 27/126/126
@ -1900,138 +1884,107 @@ f 30/127/127 27/128/128 6/129/129
f 6/130/130 19/131/131 31/132/132
f 31/133/133 30/134/134 6/135/135
g Triangle Tool 24
usemtl steel
f 29/136/136 32/137/137 33/138/138
f 29/139/139 33/140/140 28/141/141
g Triangle Tool 25
usemtl steel
f 32/142/142 29/143/143 30/144/144
f 34/145/145 32/146/146 30/147/147
g Triangle Tool 26
usemtl steel
f 34/148/148 30/149/149 31/150/150
f 35/151/151 34/152/152 31/153/153
g Triangle Tool 28
usemtl steel
f 31/154/154 19/155/155 23/156/156
f 36/157/157 31/158/158 23/159/159
g Triangle Tool 29
usemtl steel
f 37/160/160 35/161/161 31/162/162
f 36/163/163 37/164/164 31/165/165
g Triangle Tool 33
usemtl steel
f 33/166/166 32/167/167 38/168/168
g Triangle Tool 34
usemtl steel
f 38/169/169 32/170/170 34/171/171
f 39/172/172 38/173/173 34/174/174
f 39/175/175 34/176/176 35/177/177
f 39/178/178 35/179/179 37/180/180
g Triangle Tool 23 - Mirror
usemtl steel
f 42/181/181 27/182/182 28/183/183
f 43/184/184 27/185/185 42/186/186
f 43/187/187 6/188/188 27/189/189
f 6/190/190 44/191/191 40/192/192
f 44/193/193 6/194/194 43/195/195
g Triangle Tool 24 - Mirror
usemtl steel
f 42/196/196 33/197/197 45/198/198
f 42/199/199 28/200/200 33/201/201
g Triangle Tool 25 - Mirror
usemtl steel
f 45/202/202 43/203/203 42/204/204
f 46/205/205 43/206/206 45/207/207
g Triangle Tool 26 - Mirror
usemtl steel
f 46/208/208 44/209/209 43/210/210
f 47/211/211 44/212/212 46/213/213
g Triangle Tool 28 - Mirror
usemtl steel
f 44/214/214 41/215/215 40/216/216
f 48/217/217 41/218/218 44/219/219
g Triangle Tool 29 - Mirror
usemtl steel
f 49/220/220 44/221/221 47/222/222
f 48/223/223 44/224/224 49/225/225
g Triangle Tool 33 - Mirror
usemtl steel
f 33/226/226 38/227/227 45/228/228
g Triangle Tool 34 - Mirror
usemtl steel
f 38/229/229 46/230/230 45/231/231
f 39/232/232 46/233/233 38/234/234
f 39/235/235 47/236/236 46/237/237
f 39/238/238 49/239/239 47/240/240
g Triangle Tool 23 - Mirror
usemtl steel
f 53/241/241 51/242/242 52/243/243
f 54/244/244 51/245/245 53/246/246
f 54/247/247 14/248/248 51/249/249
f 14/250/250 55/251/251 50/252/252
f 55/253/253 14/254/254 54/255/255
g Triangle Tool 24 - Mirror
usemtl steel
f 53/256/256 57/257/257 56/258/258
f 53/259/259 52/260/260 57/261/261
g Triangle Tool 25 - Mirror
usemtl steel
f 56/262/262 54/263/263 53/264/264
f 58/265/265 54/266/266 56/267/267
g Triangle Tool 26 - Mirror
usemtl steel
f 58/268/268 55/269/269 54/270/270
f 59/271/271 55/272/272 58/273/273
g Triangle Tool 28 - Mirror
usemtl steel
f 55/274/274 23/275/275 50/276/276
f 36/277/277 23/278/278 55/279/279
g Triangle Tool 29 - Mirror
usemtl steel
f 37/280/280 55/281/281 59/282/282
f 36/283/283 55/284/284 37/285/285
g Triangle Tool 33 - Mirror
usemtl steel
f 57/286/286 60/287/287 56/288/288
g Triangle Tool 34 - Mirror
usemtl steel
f 60/289/289 58/290/290 56/291/291
f 39/292/292 58/293/293 60/294/294
f 39/295/295 59/296/296 58/297/297
f 39/298/298 37/299/299 59/300/300
g Triangle Tool 23 - Mirror - Mirror
usemtl steel
f 62/301/301 52/302/302 51/303/303
f 63/304/304 62/305/305 51/306/306
f 63/307/307 51/308/308 14/309/309
f 14/310/310 61/311/311 64/312/312
f 64/313/313 63/314/314 14/315/315
g Triangle Tool 24 - Mirror - Mirror
usemtl steel
f 62/316/316 65/317/317 57/318/318
f 62/319/319 57/320/320 52/321/321
g Triangle Tool 25 - Mirror - Mirror
usemtl steel
f 65/322/322 62/323/323 63/324/324
f 66/325/325 65/326/326 63/327/327
g Triangle Tool 26 - Mirror - Mirror
usemtl steel
f 66/328/328 63/329/329 64/330/330
f 67/331/331 66/332/332 64/333/333
g Triangle Tool 28 - Mirror - Mirror
usemtl steel
f 64/334/334 61/335/335 41/336/336
f 48/337/337 64/338/338 41/339/339
g Triangle Tool 29 - Mirror - Mirror
usemtl steel
f 49/340/340 67/341/341 64/342/342
f 48/343/343 49/344/344 64/345/345
g Triangle Tool 33 - Mirror - Mirror
usemtl steel
f 57/346/346 65/347/347 60/348/348
g Triangle Tool 34 - Mirror - Mirror
usemtl steel
f 60/349/349 65/350/350 66/351/351
f 39/352/352 60/353/353 66/354/354
f 39/355/355 66/356/356 67/357/357
@ -2187,40 +2140,28 @@ f 137/784/784 139/785/785 151/786/786
f 139/787/787 150/788/788 151/789/789
f 139/790/790 138/791/791 150/792/792
g Triangle Tool 3
usemtl steel
f 152/793/793 144/794/794 140/795/795
g Triangle Tool 4
usemtl steel
f 152/796/796 145/797/797 144/798/798
g Triangle Tool 5
usemtl steel
f 152/799/799 147/800/800 145/801/801
g Triangle Tool 6
usemtl steel
f 152/802/802 150/803/803 147/804/804
g Triangle Tool 7
usemtl steel
f 152/805/805 140/806/806 141/807/807
g Triangle Tool 8
usemtl steel
f 152/808/808 151/809/809 150/810/810
g Triangle Tool 9
usemtl steel
f 152/811/811 149/812/812 151/813/813
g Triangle Tool 10
usemtl steel
f 152/814/814 148/815/815 149/816/816
g Triangle Tool 11
usemtl steel
f 146/817/817 148/818/818 152/819/819
g Triangle Tool 12
usemtl steel
f 152/820/820 143/821/821 146/822/822
g Triangle Tool 13
usemtl steel
f 142/823/823 143/824/824 152/825/825
g Triangle Tool 14
usemtl steel
f 152/826/826 141/827/827 142/828/828
g

View File

@ -11,9 +11,10 @@ Entity::Entity(Entity* myParent, Mesh* myMesh, Material* myMat) : mesh(myMesh),
myParent->addChild(this);
}
void Entity::draw(const glm::mat4 viewMatrix, const glm::mat4 projectionMatrix)
void Entity::draw(const glm::mat4 viewMatrix, const glm::mat4 projectionMatrix, const glm::mat4* parentMatrix)
{
glm::mat4 modelViewMatrix = viewMatrix * modelMatrix;
glm::mat4 worldMatrix = parentMatrix == NULL ? modelMatrix : modelMatrix * *parentMatrix;
glm::mat4 modelViewMatrix = viewMatrix * worldMatrix;
glm::mat4 mvp = projectionMatrix * modelViewMatrix;
glm::mat4 normalMatrix = glm::transpose(glm::inverse(modelViewMatrix));
mat->bindAttributes();
@ -23,6 +24,8 @@ void Entity::draw(const glm::mat4 viewMatrix, const glm::mat4 projectionMatrix)
shader->bindMatrix(shader->getLocation("normalMatrix"), normalMatrix);
shader->bindMatrix(shader->getLocation("MVP"), mvp);
mesh->draw();
for(Entity* e : children)
e->draw(viewMatrix, projectionMatrix, &worldMatrix);
}
glm::mat4* Entity::getTransform()

View File

@ -21,7 +21,7 @@ public:
* NULL Material is acceptable for this constructor
*/
Entity(Entity* myParent, Mesh* myMesh, Material* myMat);
virtual void draw(const glm::mat4 viewMatrix, const glm::mat4 projectionMatrix);
virtual void draw(const glm::mat4 viewMatrix, const glm::mat4 projectionMatrix, const glm::mat4* parentMatrix);
glm::mat4* getTransform();
Shader* getShader();
Material* getMaterial();

View File

@ -14,21 +14,98 @@ std::string Utils::fileToString(const std::string &filename)
return in.readAll().toStdString();
}
void Utils::loadOBJ(const std::string &filename)
{
// loadOBJ
// mtllib -> loadMTL
// g -> resourcebase.addMesh(new Mesh())
// -> resourcebase.addEntity(new Entity())
// end -> resourcebase.addEntity(new Entity())
std::vector<glm::vec3> pos;
std::vector<glm::vec3> norm;
std::vector<glm::vec2> tex;
QString line;
QStringList list;
QFile f(QString(filename.c_str()));
if(!f.open(QFile::ReadOnly | QFile::Text))
return NULL;
QTextStream in(&f);
line = in.readLine();
while(!line.isNull())
{
if(line.isEmpty())
{
line = in.readLine();
continue;
}
switch(line.at(0).toLatin1())
{
case 'v':
//vertex attribute
list = line.split(QChar(' '));
switch(line.at(1).toLatin1())
{
case ' ':
// vertex position
pos.push_back(glm::vec3(list[1].toFloat(), list[2].toFloat(), list[3].toFloat()));
break;
case 't':
// texCoord
tex.push_back(glm::vec2(list[1].toFloat(), list[2].toFloat()));
break;
case 'n':
// normal
norm.push_back(glm::vec3(list[1].toFloat(), list[2].toFloat(), list[3].toFloat()));
break;
}
break;
case 'f':
// face
break;
case 'u':
// usemtl
break;
default:
case 'm':
// mtllib
break;
default:
case '#':
// comment
break;
}
line = in.readLine();
}
f.close();
}
void Utils::loadMTL(const std::string &filename)
{
// loadMTL
// newmtl -> resourcebase.addMaterial(new Material())
}
Mesh* Utils::loadOBJ(const std::string &filename)
{
Mesh* mesh = new Mesh();
std::vector<glm::vec3> pos;
std::vector<glm::vec3> norm;
std::vector<glm::vec2> tex;
QFile f(QString(filename.c_str()));
if(!f.open(QFile::ReadOnly | QFile::Text))
return NULL;
QTextStream in(&f);
QString line;
QStringList list;
QStringList faceList;
Mesh::Vertex v;
int nb_vertices = 0;
QFile f(QString(filename.c_str()));
if(!f.open(QFile::ReadOnly | QFile::Text))
return NULL;
QTextStream in(&f);
line = in.readLine();
while(!line.isNull())
{