From 9a4fd4ee5947224dbbf037f3cb16ee1eca5dda29 Mon Sep 17 00:00:00 2001 From: nitronoid Date: Wed, 9 May 2018 16:49:57 +0100 Subject: [PATCH] Improved morph target api --- include/MaterialPBR.h | 2 +- src/MaterialPBR.cpp | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/include/MaterialPBR.h b/include/MaterialPBR.h index d8ecb08..9e6d950 100644 --- a/include/MaterialPBR.h +++ b/include/MaterialPBR.h @@ -109,7 +109,7 @@ class MaterialPBR : public Material float getPhongStrength() const noexcept; private: - void initTargets(); + void initTargets(const std::string &_posePath, const unsigned _framePad); void initCaptureMatrices(); void initSphereMap(); void initCubeMap(const TriMesh &_cube, const MeshVBO &_vbo); diff --git a/src/MaterialPBR.cpp b/src/MaterialPBR.cpp index 40c750b..fe4e3c5 100644 --- a/src/MaterialPBR.cpp +++ b/src/MaterialPBR.cpp @@ -78,7 +78,7 @@ void MaterialPBR::init() bumpMap->bind(0); }); - initTargets(); + initTargets("models/morph_targets/owl_pose", 4); shaderPtr->bind(); shaderPtr->setPatchVertexCount(3); @@ -323,7 +323,7 @@ void MaterialPBR::setPhongStrength(const float _strength) noexcept float MaterialPBR::getPhongStrength() const noexcept { return m_phongStrength; } -void MaterialPBR::initTargets() +void MaterialPBR::initTargets(const std::string &_posePath, const unsigned _framePad) { std::vector targets; targets.resize(m_morphTargetCount); @@ -333,8 +333,8 @@ void MaterialPBR::initTargets() for (auto& target : targets) { auto frame = std::to_string(i); - frame = std::string(4 - frame.length(), '0') + frame; - target.load("models/morph_targets/owl_pose." + frame + ".obj"); + frame = std::string(_framePad - frame.length(), '0') + frame; + target.load(_posePath + "." + frame + ".obj"); auto& verts = target.getVertices(); auto& norms = target.getNormals(); @@ -512,12 +512,11 @@ void MaterialPBR::initPrefilteredMap(const TriMesh &_cube, const MeshVBO &_vbo) for (int mip = 0; mip < maxMipLevels; ++mip) { // reisze framebuffer according to mip-level size. - auto mipWidth = static_cast(128 * std::pow(0.5f, mip)); - auto mipHeight = static_cast(128 * std::pow(0.5f, mip)); - auto fbo = std::make_unique(mipWidth, mipHeight, QOpenGLFramebufferObject::Depth); + auto mipRes = static_cast(128 * std::pow(0.5f, mip)); + auto fbo = std::make_unique(mipRes, mipRes, QOpenGLFramebufferObject::Depth); fbo->bind(); // funcs->glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, mipWidth, mipHeight); - funcs->glViewport(0, 0, mipWidth, mipHeight); + funcs->glViewport(0, 0, mipRes, mipRes); float roughness = static_cast(mip) / static_cast(maxMipLevels - 1); prefilterShader->setUniformValue("u_roughness", roughness);