From: Peter Schaefer Date: Wed, 27 Apr 2016 15:38:21 +0000 (+0200) Subject: MeshLoader ignoriert fehlende Normals & UV's X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=84934b5efa9627e36e78be62703f86174ad7218c;p=cgue_weave.git MeshLoader ignoriert fehlende Normals & UV's --- diff --git a/Weave/Graphix/Model/Model.cpp b/Weave/Graphix/Model/Model.cpp index 8289d91..bb0db48 100644 --- a/Weave/Graphix/Model/Model.cpp +++ b/Weave/Graphix/Model/Model.cpp @@ -384,14 +384,9 @@ bool Model::loadMesh(const aiMesh* mesh, uint& numvertices, uint& numfaces, floa name = std::string((char*) (mesh->mName.data),(uint) (mesh->mName.length)); numvertices = mesh->mNumVertices; numfaces = mesh->mNumFaces; - vertex = new float[numvertices * 3]; - uvs = new float[numvertices * 2]; - index = new uint[numfaces * 3]; - normals = new float[numvertices * 3]; - //aiFace* faces = mesh->mFaces; - //load vertices from Mesh + vertex = new float[numvertices * 3]; for (uint i = 0; i < numvertices; i++) { vertex[3 * i] = _scale.x * mesh->mVertices[i].x; @@ -399,14 +394,8 @@ bool Model::loadMesh(const aiMesh* mesh, uint& numvertices, uint& numfaces, floa vertex[3 * i + 2] = _scale.z * mesh->mVertices[i].z; } - //load UVs from Mesh - for (uint i = 0; i < numvertices; i++) - { - uvs[2 * i] = mesh->mTextureCoords[0][i].x;//[i]->x; - uvs[2 * i + 1] = mesh->mTextureCoords[0][i].y;//[i]->y; - } - //load indices from Mesh + index = new uint[numfaces * 3]; for (uint i = 0; i < numfaces; i++) { index[3 * i] = mesh->mFaces[i].mIndices[0]; @@ -414,12 +403,28 @@ bool Model::loadMesh(const aiMesh* mesh, uint& numvertices, uint& numfaces, floa index[3 * i + 2] = mesh->mFaces[i].mIndices[2]; } + //load UVs from Mesh + if (mesh->mTextureCoords[0] != NULL) + { + uvs = new float[numvertices * 2]; + for (uint i = 0; i < numvertices; i++) + { + uvs[2 * i] = mesh->mTextureCoords[0][i].x;//[i]->x; + uvs[2 * i + 1] = mesh->mTextureCoords[0][i].y;//[i]->y; + } + } + //load normals from Mesh - for (uint i = 0; i < numvertices; i++) + if (mesh->mNormals != NULL) { - normals[3 * i] = mesh->mNormals[i].x;// / _scale.x; - normals[3 * i + 1] = mesh->mNormals[i].y;// / _scale.y; - normals[3 * i + 2] = mesh->mNormals[i].z;// / _scale.z; + normals = new float[numvertices * 3]; + for (uint i = 0; i < numvertices; i++) + { + normals[3 * i] = mesh->mNormals[i].x;// / _scale.x; + normals[3 * i + 1] = mesh->mNormals[i].y;// / _scale.y; + normals[3 * i + 2] = mesh->mNormals[i].z;// / _scale.z; + } + } return true; diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp index fa685eb..f1684d2 100644 --- a/Weave/Scene/SceneObject.cpp +++ b/Weave/Scene/SceneObject.cpp @@ -101,9 +101,11 @@ move_delta(0) { /* BADHACK */ collision = model; - collision->bt_init(); + } + collision->bt_init(); + btTransform btModelMat; btModelMat.setFromOpenGLMatrix(value_ptr(modelMat));