From 42fcaf7d7d374bdae934b5d9aeb32af964872681 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sat, 27 Feb 2010 23:50:32 +0100 Subject: Testing model-loading with assimp. --- assimp.cpp | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100755 assimp.cpp (limited to 'assimp.cpp') diff --git a/assimp.cpp b/assimp.cpp new file mode 100755 index 0000000..c00c96b --- /dev/null +++ b/assimp.cpp @@ -0,0 +1,124 @@ +#include +#include + +#include "pattern.h" +#include "application.h" + +#include "texturesdl.h" + +#include +#include +#include + +Assimp::Importer* importer; + +class FiskPattern : public Pattern { + private: + const aiScene* scene; + + Texture** textures; + + public: + FiskPattern() : Pattern("patt.jon") { + scene = importer->ReadFile("tewi.x", 0); + + if(scene) { + std::cout << "Loaded model: " << scene->mNumMeshes << " meshes, " << scene->mNumMaterials << " materials." << std::endl; + for(int i = 0; i < scene->mNumMaterials; i++) { + aiMaterial* material = scene->mMaterials[i]; + + std::cout << "Material " << i << ": " << material->mNumProperties << " properties." << std::endl; + + for(int j = 0; j < material->mNumProperties; j++) { + aiMaterialProperty* property = material->mProperties[j]; + + std::cout << " " << std::string(property->mKey.data, property->mKey.length) << ": " << std::string(property->mData, property->mDataLength) << std::endl; + } + + } + + for(int i = 0; i < scene->mNumMeshes; i++) { + aiMesh* mesh = scene->mMeshes[i]; + + std::cout << "Mesh " << i << ": mMaterialIndex = " << mesh->mMaterialIndex << "." << std::endl; + + } + + } else { + std::cerr << "Failed to import model." << std::endl << importer->GetErrorString() << std::endl; + } + + Texture* tex_face = new TextureSDL("TEWI_face_01.bmp"); + Texture* tex_hair = new TextureSDL("TEWI_Hair_01.bmp"); + Texture* tex_body = new TextureSDL("TEWI_Body_01.bmp"); + Texture* tex_hair2 = new TextureSDL("TEWI_Hair_02.bmp"); + Texture* tex_body2 = new TextureSDL("TEWI_Body_02.bmp"); + + + textures = new Texture*[10]; + + textures[1] = tex_face; + textures[2] = tex_hair; + textures[3] = tex_body; + textures[4] = tex_body; + textures[5] = tex_body; + textures[6] = tex_body; + textures[7] = tex_body; + textures[8] = tex_hair; + textures[9] = new TextureSDL("gradient.png"); + + patt_width = 50.0; + } + + protected: + virtual void draw() { + double gl_para[16]; + arglCameraView(patt_trans_kake, gl_para, 1.0); + + glMatrixMode(GL_MODELVIEW); + glLoadMatrixd(gl_para); + + //glTranslatef(0.0, -8.0, 0.0); + + glRotatef(90, 1, 0, 0); + + //glColor4f(1, 0, 0, 0.5); + glPolygonMode(GL_FRONT, GL_FILL); + + for(int i = 0; i < 6; i++) { // scene->mNumMeshes + aiMesh* mesh = scene->mMeshes[i]; + + glBindTexture(GL_TEXTURE_2D, textures[mesh->mMaterialIndex]->tex()); + + for(int j = 0; j < mesh->mNumFaces; j++) { + aiFace* face = &mesh->mFaces[j]; + + glBegin(GL_POLYGON); + for(int k = 0; k < face->mNumIndices; k++) { + aiVector3D* texcoord = &mesh->mTextureCoords[0][face->mIndices[k]]; + glTexCoord2f(texcoord->x, 2 - texcoord->y); + aiVector3D* vertice = &mesh->mVertices[face->mIndices[k]]; + glVertex3f(vertice->x, vertice->y, vertice->z); + } + glEnd(); + } + } + + } +}; + +int main(int argc, char **argv) { + try { + Application* app = new Application(); + + Assimp::Importer _importer; + importer = &_importer; + + app->patt = new FiskPattern(); + + app->run(); + } catch(std::runtime_error e) { + std::cerr << "Exception caught: " << e.what() << std::endl; + } + return 0; +} -- cgit v1.2.3