projects
/
opengl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
New skyboxes
[opengl.git]
/
model.cpp
diff --git
a/model.cpp
b/model.cpp
index 107fda0b321317ab54a145d7e1249c08f340abde..a11a0745dd9d4b8d41da1c8a3809fa34384e1037 100644
(file)
--- a/
model.cpp
+++ b/
model.cpp
@@
-1,16
+1,8
@@
#include "model.hpp"
#include <iostream>
#include "model.hpp"
#include <iostream>
-#include <assimp/postprocess.h>
#include <assimp/quaternion.h>
#include <glm/gtc/type_ptr.hpp>
#include <assimp/quaternion.h>
#include <glm/gtc/type_ptr.hpp>
-glm::mat4 aiMatrixToMat4(aiMatrix4x4 from) {
- glm::mat4 to;
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- to[i][j] = from[j][i];
- return to;
-}
Model::Mesh::Mesh(const aiMesh *aiMesh, GLuint progId) {
Model::Mesh::Mesh(const aiMesh *aiMesh, GLuint progId) {
@@
-232,11
+224,11
@@
void Model::Node::draw( const std::vector<Mesh> &meshes,
}
}
- glm::mat4 m = parentTrans * animTrans * aiMatrixToMat4(ai.mTransformation)
* model
;
+ glm::mat4 m = parentTrans * animTrans * aiMatrixToMat4(ai.mTransformation);
- for (auto child: children) {
- boneTransforms[std::string(ai.mName.C_Str())] = m;
- }
+ /* for (auto child: children) { */
+ /* boneTransforms[std::string(ai.mName.C_Str())] = m; */
+ /* } */
for (unsigned int i: meshIndices) {
const Mesh &mesh = meshes[i];
for (unsigned int i: meshIndices) {
const Mesh &mesh = meshes[i];
@@
-250,13
+242,17
@@
void Model::Node::draw( const std::vector<Mesh> &meshes,
std::string nodeName = pair.first;
unsigned int boneId = pair.second.first;
std::string nodeName = pair.first;
unsigned int boneId = pair.second.first;
+ // This is actually an inverse-bind matrix
+ // i.e. position of the mesh in bone space
+ // so no need to inverse again!
+ // https://github.com/assimp/assimp/pull/1803/files
glm::mat4 boneOffset = pair.second.second;
glm::mat4 boneTrans(1.f);
glm::mat4 boneOffset = pair.second.second;
glm::mat4 boneTrans(1.f);
- if (boneTransforms.count(nodeName)) {
- std::cerr << "got bone transform from map" << std::endl;
- boneTrans = boneTransforms[nodeName];
- }
+ /* if (boneTransforms.count(nodeName)) { */
+ /* std::cerr << "got bone transform from map" << std::endl; */
+ /* boneTrans = boneTransforms[nodeName]; */
+ /* } */
for (const Animation anim: animMap->at(nodeName)) {
float t = fmod(tick, anim.duration);
for (const aiNodeAnim *nodeAnim: anim.nodeAnims) {
for (const Animation anim: animMap->at(nodeName)) {
float t = fmod(tick, anim.duration);
for (const aiNodeAnim *nodeAnim: anim.nodeAnims) {
@@
-266,7
+262,7
@@
void Model::Node::draw( const std::vector<Mesh> &meshes,
}
}
}
}
- boneTrans = boneTrans *
glm::inverse(boneOffset)
;
+ boneTrans = boneTrans *
boneOffset
;
std::string boneLocStr = "bones[" + std::to_string(boneId) + "]";
std::string boneLocStr = "bones[" + std::to_string(boneId) + "]";
@@
-296,16
+292,9
@@
void Model::Node::draw( const std::vector<Mesh> &meshes,
for (Node *child: children) child->draw(meshes, materials, skybox, tick, m, boneTransforms);
}
for (Node *child: children) child->draw(meshes, materials, skybox, tick, m, boneTransforms);
}
-Model::Model(const
std::string &path
, Program p): program(p) {
+Model::Model(const
aiScene *scene
, Program p): program(p) {
glUseProgram(p.progId);
glUseProgram(p.progId);
- const aiScene *scene = importer.ReadFile(path,
- aiProcess_Triangulate | aiProcess_CalcTangentSpace | aiProcess_GenNormals | aiProcess_FlipUVs);
- if (!scene) {
- std::cerr << importer.GetErrorString() << std::endl;
- exit(1);
- }
-
for (int i = 0; i < scene->mNumMeshes; i++) {
const aiMesh *mesh = scene->mMeshes[i];
meshes.push_back(Mesh(mesh, p.progId));
for (int i = 0; i < scene->mNumMeshes; i++) {
const aiMesh *mesh = scene->mMeshes[i];
meshes.push_back(Mesh(mesh, p.progId));