diff --git a/KREngine/KREngine/Classes/KRInstance.cpp b/KREngine/KREngine/Classes/KRInstance.cpp index 1505644..90965f0 100644 --- a/KREngine/KREngine/Classes/KRInstance.cpp +++ b/KREngine/KREngine/Classes/KRInstance.cpp @@ -90,29 +90,31 @@ void KRInstance::render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume projectionMatrix = pCamera->getProjectionMatrix(); } - if(m_pModel != NULL && (getExtents(pContext).test_intersect(frustrumVolume) || renderPass == RENDER_PASS_SHADOWMAP)) { - //if(m_pModel != NULL && (getBounds().visible(viewMatrix * projectionMatrix) || renderPass == RENDER_PASS_SHADOWMAP)) { + if(m_pModel != NULL) { + if(getExtents(pContext).test_intersect(frustrumVolume) || renderPass == RENDER_PASS_SHADOWMAP) { + //if(m_pModel != NULL && (getBounds().visible(viewMatrix * projectionMatrix) || renderPass == RENDER_PASS_SHADOWMAP)) { - if(m_pLightMap == NULL && m_lightMap.size()) { - m_pLightMap = pContext->getTextureManager()->getTexture(m_lightMap.c_str()); + if(m_pLightMap == NULL && m_lightMap.size()) { + m_pLightMap = pContext->getTextureManager()->getTexture(m_lightMap.c_str()); + } + + if(cShadowBuffers == 0 && m_pLightMap && pCamera->bEnableLightMap && renderPass != RENDER_PASS_SHADOWMAP) { + m_pContext->getTextureManager()->selectTexture(3, m_pLightMap); + } + + KRMat4 mvpmatrix = m_modelMatrix * viewMatrix * projectionMatrix; + KRMat4 matModelToView = viewMatrix * m_modelMatrix; + matModelToView.transpose(); + matModelToView.invert(); + + // Transform location of camera to object space for calculation of specular halfVec + KRMat4 inverseModelMatrix = m_modelMatrix; + inverseModelMatrix.invert(); + KRVector3 cameraPosObject = KRMat4::Dot(inverseModelMatrix, cameraPosition); + KRVector3 lightDirObject = KRMat4::Dot(inverseModelMatrix, lightDirection); + + m_pModel->render(pCamera, pContext, matModelToView, mvpmatrix, cameraPosObject, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, m_pLightMap, renderPass); } - - if(cShadowBuffers == 0 && m_pLightMap && pCamera->bEnableLightMap && renderPass != RENDER_PASS_SHADOWMAP) { - m_pContext->getTextureManager()->selectTexture(3, m_pLightMap); - } - - KRMat4 mvpmatrix = m_modelMatrix * viewMatrix * projectionMatrix; - KRMat4 matModelToView = viewMatrix * m_modelMatrix; - matModelToView.transpose(); - matModelToView.invert(); - - // Transform location of camera to object space for calculation of specular halfVec - KRMat4 inverseModelMatrix = m_modelMatrix; - inverseModelMatrix.invert(); - KRVector3 cameraPosObject = KRMat4::Dot(inverseModelMatrix, cameraPosition); - KRVector3 lightDirObject = KRMat4::Dot(inverseModelMatrix, lightDirection); - - m_pModel->render(pCamera, pContext, matModelToView, mvpmatrix, cameraPosObject, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, m_pLightMap, renderPass); } } } @@ -124,13 +126,15 @@ void KRInstance::calcExtents(KRContext *pContext) calcModelMatrix(); KRNode::calcExtents(pContext); - loadModel(); - KRMesh *pMesh = m_pModel->getMesh(); - KRBoundingVolume mesh_bounds = KRBoundingVolume(pMesh->getMinPoint(), pMesh->getMaxPoint(), m_modelMatrix); - if(m_pExtents) { - *m_pExtents = m_pExtents->get_union(mesh_bounds); - } else { - m_pExtents = new KRBoundingVolume(mesh_bounds); + loadModel(); + if(m_pModel != NULL) { + KRMesh *pMesh = m_pModel->getMesh(); + KRBoundingVolume mesh_bounds = KRBoundingVolume(pMesh->getMinPoint(), pMesh->getMaxPoint(), m_modelMatrix); + if(m_pExtents) { + *m_pExtents = m_pExtents->get_union(mesh_bounds); + } else { + m_pExtents = new KRBoundingVolume(mesh_bounds); + } } } @@ -145,6 +149,7 @@ bool KRInstance::hasTransparency() { KRAABB KRInstance::getBounds() { calcModelMatrix(); loadModel(); + assert(m_pModel != NULL); KRMesh *pMesh = m_pModel->getMesh(); KRVector3 meshMin = pMesh->getMinPoint(); diff --git a/KREngine/KREngine/Classes/KRMesh.cpp b/KREngine/KREngine/Classes/KRMesh.cpp index 341a708..2fd157c 100644 --- a/KREngine/KREngine/Classes/KRMesh.cpp +++ b/KREngine/KREngine/Classes/KRMesh.cpp @@ -97,7 +97,7 @@ vector KRMesh::getSubmeshes() { pSubmesh->vertex_count = pPackMaterial->vertex_count; strncpy(pSubmesh->szMaterialName, pPackMaterial->szName, 256); - pSubmesh->szMaterialName[63] = '\0'; + pSubmesh->szMaterialName[255] = '\0'; //fprintf(stderr, "Submesh material: \"%s\"\n", pSubmesh->szMaterialName); m_submeshes.push_back(pSubmesh); } diff --git a/KREngine/KREngine/Classes/KRModel.cpp b/KREngine/KREngine/Classes/KRModel.cpp index 39f389e..58ea7ed 100644 --- a/KREngine/KREngine/Classes/KRModel.cpp +++ b/KREngine/KREngine/Classes/KRModel.cpp @@ -67,7 +67,6 @@ KRModel::~KRModel() { void KRModel::render(KRCamera *pCamera, KRContext *pContext, KRMat4 &matModelToView, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRTexture *pLightMap, KRNode::RenderPass renderPass) { //fprintf(stderr, "Rendering model: %s\n", m_name.c_str()); - if(renderPass != KRNode::RENDER_PASS_FLARES) { if(m_materials.size() == 0) {