Skinned meshes now in T-Pose when not it's blendtree is null
This commit is contained in:
@@ -77,6 +77,9 @@ public:
|
|||||||
std::map<int, Skeleton::PoseData> BlendPoseAdditive(const std::map<int, PoseData>& additivePose, const std::map<int, PoseData>& targetPose);
|
std::map<int, Skeleton::PoseData> BlendPoseAdditive(const std::map<int, PoseData>& additivePose, const std::map<int, PoseData>& targetPose);
|
||||||
void GetFinalPose(std::map<int, Skeleton::PoseData>& boneMatrices, std::vector<glm::mat4>& finalPose, std::map<int, glm::mat4>& boneTransforms);
|
void GetFinalPose(std::map<int, Skeleton::PoseData>& boneMatrices, std::vector<glm::mat4>& finalPose, std::map<int, glm::mat4>& boneTransforms);
|
||||||
|
|
||||||
|
std::vector<glm::mat4> GetTPose();
|
||||||
|
|
||||||
|
|
||||||
std::map<std::string, Animation> Animations;
|
std::map<std::string, Animation> Animations;
|
||||||
private:
|
private:
|
||||||
Skeleton::PoseData GetAdditiveBonePose(const Bone* bone, const Animation* animation, double time);
|
Skeleton::PoseData GetAdditiveBonePose(const Bone* bone, const Animation* animation, double time);
|
||||||
|
|||||||
@@ -362,11 +362,15 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
||||||
glUniform3fv(glGetUniformLocation(explosionSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
glUniform3fv(glGetUniformLocation(explosionSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (explosionEffectJob->BlendTree != nullptr) {
|
if (explosionEffectJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = explosionEffectJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ExplosionEffectProgram->Bind();
|
m_ExplosionEffectProgram->Bind();
|
||||||
@@ -391,11 +395,14 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
//bind textures
|
//bind textures
|
||||||
BindExplosionTextures(explosionSplatMapSkinnedHandle, explosionEffectJob);
|
BindExplosionTextures(explosionSplatMapSkinnedHandle, explosionEffectJob);
|
||||||
GLERROR("asdasd");
|
GLERROR("asdasd");
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (explosionEffectJob->BlendTree != nullptr) {
|
if (explosionEffectJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = explosionEffectJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ExplosionEffectSplatMapProgram->Bind();
|
m_ExplosionEffectSplatMapProgram->Bind();
|
||||||
@@ -438,12 +445,14 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
||||||
glUniform3fv(glGetUniformLocation(forwardSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
glUniform3fv(glGetUniformLocation(forwardSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
||||||
|
|
||||||
if (modelJob->BlendTree != nullptr) {
|
std::vector<glm::mat4> frameBones;
|
||||||
std::vector<glm::mat4> frameBones;
|
if (modelJob->BlendTree != nullptr) {
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
}
|
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
m_ForwardPlusProgram->Bind();
|
m_ForwardPlusProgram->Bind();
|
||||||
GLERROR("Bind ForwardPlusProgram");
|
GLERROR("Bind ForwardPlusProgram");
|
||||||
@@ -467,11 +476,14 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
//bind textures
|
//bind textures
|
||||||
BindModelTextures(forwardSplatMapSkinnedHandle, modelJob);
|
BindModelTextures(forwardSplatMapSkinnedHandle, modelJob);
|
||||||
GLERROR("asdasd");
|
GLERROR("asdasd");
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ForwardPlusSplatMapProgram->Bind();
|
m_ForwardPlusSplatMapProgram->Bind();
|
||||||
@@ -547,11 +559,14 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
||||||
glUniform3fv(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
glUniform3fv(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (explosionEffectJob->BlendTree != nullptr) {
|
if (explosionEffectJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = explosionEffectJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ExplosionEffectShieldCheckProgram->Bind();
|
m_ExplosionEffectShieldCheckProgram->Bind();
|
||||||
@@ -578,11 +593,14 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
BindExplosionTextures(explosionSplatMapSkinnedShieldCheckHandle, explosionEffectJob);
|
BindExplosionTextures(explosionSplatMapSkinnedShieldCheckHandle, explosionEffectJob);
|
||||||
GLERROR("asdasd");
|
GLERROR("asdasd");
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (explosionEffectJob->BlendTree != nullptr) {
|
if (explosionEffectJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = explosionEffectJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ExplosionEffectSplatMapShieldCheckProgram->Bind();
|
m_ExplosionEffectSplatMapShieldCheckProgram->Bind();
|
||||||
@@ -614,12 +632,14 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
||||||
glUniform3fv(glGetUniformLocation(explosionSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
glUniform3fv(glGetUniformLocation(explosionSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (explosionEffectJob->BlendTree != nullptr) {
|
if (explosionEffectJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = explosionEffectJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
}
|
glUniformMatrix4fv(glGetUniformLocation(explosionSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
m_ExplosionEffectProgram->Bind();
|
m_ExplosionEffectProgram->Bind();
|
||||||
GLERROR("Bind ExplosionEffect program");
|
GLERROR("Bind ExplosionEffect program");
|
||||||
@@ -643,12 +663,14 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
//bind textures
|
//bind textures
|
||||||
BindExplosionTextures(explosionSplatMapSkinnedHandle, explosionEffectJob);
|
BindExplosionTextures(explosionSplatMapSkinnedHandle, explosionEffectJob);
|
||||||
GLERROR("asdasd");
|
GLERROR("asdasd");
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (explosionEffectJob->BlendTree != nullptr) {
|
if (explosionEffectJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = explosionEffectJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(explosionSplatMapSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ExplosionEffectSplatMapProgram->Bind();
|
m_ExplosionEffectSplatMapProgram->Bind();
|
||||||
@@ -693,11 +715,14 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
||||||
glUniform3fv(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
glUniform3fv(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ForwardPlusShieldCheckProgram->Bind();
|
m_ForwardPlusShieldCheckProgram->Bind();
|
||||||
@@ -723,11 +748,13 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
BindModelTextures(forwardSplatMapSkinnedShieldCheckHandle, modelJob);
|
BindModelTextures(forwardSplatMapSkinnedShieldCheckHandle, modelJob);
|
||||||
GLERROR("asdasd");
|
GLERROR("asdasd");
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(forwardSplatMapSkinnedShieldCheckHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ForwardPlusSplatMapShieldCheckProgram->Bind();
|
m_ForwardPlusSplatMapShieldCheckProgram->Bind();
|
||||||
@@ -757,11 +784,14 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMapPass->m_CubeMapTexture);
|
||||||
glUniform3fv(glGetUniformLocation(forwardSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
glUniform3fv(glGetUniformLocation(forwardSkinnedHandle, "CameraPosition"), 1, glm::value_ptr(scene.Camera->Position()));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ForwardPlusProgram->Bind();
|
m_ForwardPlusProgram->Bind();
|
||||||
@@ -787,11 +817,13 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
|
|||||||
BindModelTextures(forwardSplatMapSkinnedHandle, modelJob);
|
BindModelTextures(forwardSplatMapSkinnedHandle, modelJob);
|
||||||
GLERROR("asdasd");
|
GLERROR("asdasd");
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_ForwardPlusSplatMapProgram->Bind();
|
m_ForwardPlusSplatMapProgram->Bind();
|
||||||
@@ -849,11 +881,14 @@ void DrawFinalPass::DrawShieldedModelRenderQueue(std::list<std::shared_ptr<Rende
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (explosionEffectJob->BlendTree != nullptr) {
|
if (explosionEffectJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
frameBones = explosionEffectJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(explosionHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = explosionEffectJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(explosionHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
if (GLERROR("Animation")) {
|
if (GLERROR("Animation")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -885,12 +920,16 @@ void DrawFinalPass::DrawShieldedModelRenderQueue(std::list<std::shared_ptr<Rende
|
|||||||
//bind textures
|
//bind textures
|
||||||
BindModelTextures(forwardHandle ,modelJob);
|
BindModelTextures(forwardHandle ,modelJob);
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
|
|
||||||
//draw
|
//draw
|
||||||
glBindVertexArray(modelJob->Model->VAO);
|
glBindVertexArray(modelJob->Model->VAO);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
|
||||||
@@ -918,11 +957,14 @@ void DrawFinalPass::DrawToDepthStencilBuffer(std::list<std::shared_ptr<RenderJob
|
|||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
m_FillDepthStencilBufferProgram->Bind();
|
m_FillDepthStencilBufferProgram->Bind();
|
||||||
GLuint shaderHandle = m_FillDepthStencilBufferProgram->GetHandle();
|
GLuint shaderHandle = m_FillDepthStencilBufferProgram->GetHandle();
|
||||||
|
|||||||
@@ -104,11 +104,15 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
||||||
glUniform2fv(glGetUniformLocation(shaderSkinnedHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1])));
|
glUniform2fv(glGetUniformLocation(shaderSkinnedHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1])));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
m_PickingProgram->Bind();
|
m_PickingProgram->Bind();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
@@ -210,12 +214,15 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
||||||
glUniform2fv(glGetUniformLocation(shaderSkinnedHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1])));
|
glUniform2fv(glGetUniformLocation(shaderSkinnedHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1])));
|
||||||
|
|
||||||
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
std::vector<glm::mat4> frameBones;
|
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
} else {
|
||||||
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
m_PickingProgram->Bind();
|
m_PickingProgram->Bind();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
|
|||||||
@@ -249,6 +249,18 @@ void Skeleton::GetFinalPose(std::map<int, Skeleton::PoseData>& poseDatas, std::v
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<glm::mat4> Skeleton::GetTPose()
|
||||||
|
{
|
||||||
|
std::vector<glm::mat4> finalMatrices;
|
||||||
|
|
||||||
|
for (auto b : Bones) {
|
||||||
|
finalMatrices.push_back(glm::mat4(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalMatrices;
|
||||||
|
}
|
||||||
|
|
||||||
void Skeleton::AccumulateFinalPose(std::map<int, glm::mat4>& boneMatrices, std::map<int, Skeleton::PoseData>& poseDatas, std::map<int, glm::mat4>& boneTransforms, const Bone* bone, glm::mat4 parentMatrix)
|
void Skeleton::AccumulateFinalPose(std::map<int, glm::mat4>& boneMatrices, std::map<int, Skeleton::PoseData>& poseDatas, std::map<int, glm::mat4>& boneTransforms, const Bone* bone, glm::mat4 parentMatrix)
|
||||||
{
|
{
|
||||||
glm::mat4 boneMatrix;
|
glm::mat4 boneMatrix;
|
||||||
|
|||||||
Reference in New Issue
Block a user