diff --git a/KREngine/KREngine/Classes/KRBoundingVolume.cpp b/KREngine/KREngine/Classes/KRBoundingVolume.cpp index 400d72b..910c366 100644 --- a/KREngine/KREngine/Classes/KRBoundingVolume.cpp +++ b/KREngine/KREngine/Classes/KRBoundingVolume.cpp @@ -52,7 +52,7 @@ KRBoundingVolume::KRBoundingVolume(const KRVector3 &corner1, const KRVector3 &co m_vertices[7] = KRVector3(corner1.x, corner2.y, corner2.z); for(int iVertex=0; iVertex < 8; iVertex++) { - m_vertices[iVertex] = modelMatrix.dot(m_vertices[iVertex]); + m_vertices[iVertex] = KRMat4::Dot(modelMatrix, m_vertices[iVertex]); } } @@ -74,7 +74,7 @@ KRBoundingVolume::KRBoundingVolume(const KRMat4 &matView, GLfloat fov, GLfloat a m_vertices[7] = KRVector3(-1.0 * r * farz * aspect, 1.0 * r * farz, -farz); for(int iVertex=0; iVertex < 8; iVertex++) { - m_vertices[iVertex] = invView.dot(m_vertices[iVertex]); + m_vertices[iVertex] = KRMat4::Dot(invView, m_vertices[iVertex]); } } @@ -203,9 +203,9 @@ KRMat4 KRBoundingVolume::calcShadowProj(KRScene *pScene, KRContext *pContext, GL shadowvp.invert(); shadowvp.scale(1.0, 1.0, -1.0); - KRVector3 minPointFrustrum = shadowvp.dot(m_vertices[0]), maxPointFrustrum = minPointFrustrum; + KRVector3 minPointFrustrum = KRMat4::Dot(shadowvp, m_vertices[0]), maxPointFrustrum = minPointFrustrum; for(int iVertex=1; iVertex < 8; iVertex++) { - KRVector3 v = shadowvp.dot(m_vertices[iVertex]); + KRVector3 v = KRMat4::Dot(shadowvp, m_vertices[iVertex]); if(v.x < minPointFrustrum.x) { minPointFrustrum.x = v.x; } @@ -227,9 +227,9 @@ KRMat4 KRBoundingVolume::calcShadowProj(KRScene *pScene, KRContext *pContext, GL } - KRVector3 minPointScene = shadowvp.dot(sceneVolume.m_vertices[0]), maxPointScene = minPointScene; + KRVector3 minPointScene = KRMat4::Dot(shadowvp, sceneVolume.m_vertices[0]), maxPointScene = minPointScene; for(int iVertex=1; iVertex < 8; iVertex++) { - KRVector3 v = shadowvp.dot(sceneVolume.m_vertices[iVertex]); + KRVector3 v = KRMat4::Dot(shadowvp, sceneVolume.m_vertices[iVertex]); if(v.x < minPointScene.x) { minPointScene.x = v.x; } diff --git a/KREngine/KREngine/Classes/KRDirectionalLight.cpp b/KREngine/KREngine/Classes/KRDirectionalLight.cpp index 9623ea4..8b76371 100644 --- a/KREngine/KREngine/Classes/KRDirectionalLight.cpp +++ b/KREngine/KREngine/Classes/KRDirectionalLight.cpp @@ -38,7 +38,7 @@ KRVector3 KRDirectionalLight::getWorldLightDirection() { m.rotate(world_rotation.y, Y_AXIS); m.rotate(world_rotation.z, X_AXIS); m.rotate(-90.0 * d2r, Y_AXIS); - KRVector3 light_direction = m.dot(light_rotation); + KRVector3 light_direction = KRMat4::Dot(m, light_rotation); return light_direction; } @@ -61,7 +61,7 @@ void KRDirectionalLight::render(KRCamera *pCamera, KRContext *pContext, KRBoundi matModelToView.invert(); KRVector3 light_direction_view_space = getWorldLightDirection(); - light_direction_view_space = matModelToView.dot(light_direction_view_space); + light_direction_view_space = KRMat4::Dot(matModelToView, light_direction_view_space); light_direction_view_space.normalize(); KRShader *pShader = pContext->getShaderManager()->getShader("light_directional", pCamera, false, false, false, 0, false, false, false, false, false, false, false, gBufferPass); diff --git a/KREngine/KREngine/Classes/KREngine.mm b/KREngine/KREngine/Classes/KREngine.mm index 51c2e70..7f77168 100644 --- a/KREngine/KREngine/Classes/KREngine.mm +++ b/KREngine/KREngine/Classes/KREngine.mm @@ -223,7 +223,7 @@ double const PI = 3.141592653589793f; KRMat4 invViewMatrix = viewMatrix; invViewMatrix.invert(); - KRVector3 cameraPosition = invViewMatrix.dot(KRVector3(0.0,0.0,0.0)); + KRVector3 cameraPosition = KRMat4::Dot(invViewMatrix, KRVector3(0.0,0.0,0.0)); KRVector3 lightDirection(0.0, 0.0, 1.0); @@ -231,7 +231,7 @@ double const PI = 3.141592653589793f; KRMat4 shadowvp; shadowvp.rotate(sun_pitch, X_AXIS); shadowvp.rotate(sun_yaw, Y_AXIS); - lightDirection = shadowvp.dot(lightDirection); + lightDirection = KRMat4::Dot(shadowvp, lightDirection); shadowvp.invert(); @@ -348,7 +348,7 @@ double const PI = 3.141592653589793f; vertices[7] = KRVector3(-1.0, 1.0, 1.0); for(int iVertex=0; iVertex < 8; iVertex++) { - vertices[iVertex] = matInvShadow.dot(vertices[iVertex]); + vertices[iVertex] = KRMat4::Dot(matInvShadow, vertices[iVertex]); } KRVector3 cameraPosition; diff --git a/KREngine/KREngine/Classes/KRInstance.cpp b/KREngine/KREngine/Classes/KRInstance.cpp index 67f6fe6..cbcb243 100644 --- a/KREngine/KREngine/Classes/KRInstance.cpp +++ b/KREngine/KREngine/Classes/KRInstance.cpp @@ -102,8 +102,8 @@ void KRInstance::render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume // Transform location of camera to object space for calculation of specular halfVec KRMat4 inverseModelMatrix = m_modelMatrix; inverseModelMatrix.invert(); - KRVector3 cameraPosObject = inverseModelMatrix.dot(cameraPosition); - KRVector3 lightDirObject = inverseModelMatrix.dot(lightDirection); + KRVector3 cameraPosObject = KRMat4::Dot(inverseModelMatrix, cameraPosition); + KRVector3 lightDirObject = KRMat4::Dot(inverseModelMatrix, lightDirection); m_pModel->render(pCamera, pContext, bRenderShadowMap, matModelToView, mvpmatrix, cameraPosObject, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, m_pLightMap, gBufferPass); diff --git a/KREngine/KREngine/Classes/KRMat4.cpp b/KREngine/KREngine/Classes/KRMat4.cpp index d790ed2..a80ef7e 100644 --- a/KREngine/KREngine/Classes/KRMat4.cpp +++ b/KREngine/KREngine/Classes/KRMat4.cpp @@ -71,6 +71,14 @@ KRMat4& KRMat4::operator=(const KRMat4 &m) { return *this; } +float& KRMat4::operator[](unsigned i) { + return m_mat[i]; +} + +float KRMat4::operator[](unsigned i) const { + return m_mat[i]; +} + // Overload comparison operator bool KRMat4::operator==(const KRMat4 &m) { return memcmp(m_mat, m.m_mat, sizeof(GLfloat) * 16) == 0; @@ -262,10 +270,10 @@ void KRMat4::transpose() { } /* Dot Product */ -KRVector3 KRMat4::dot(const KRVector3 &v) const { +KRVector3 KRMat4::Dot(const KRMat4 &m, const KRVector3 &v) { return KRVector3( - v.x * (float)m_mat[0*4 + 0] + v.y * (float)m_mat[1*4 + 0] + v.z * (float)m_mat[2*4 + 0] + (float)m_mat[3*4 + 0], - v.x * (float)m_mat[0*4 + 1] + v.y * (float)m_mat[1*4 + 1] + v.z * (float)m_mat[2*4 + 1] + (float)m_mat[3*4 + 1], - v.x * (float)m_mat[0*4 + 2] + v.y * (float)m_mat[1*4 + 2] + v.z * (float)m_mat[2*4 + 2] + (float)m_mat[3*4 + 2] + v.x * (float)m[0*4 + 0] + v.y * (float)m[1*4 + 0] + v.z * (float)m[2*4 + 0] + (float)m[3*4 + 0], + v.x * (float)m[0*4 + 1] + v.y * (float)m[1*4 + 1] + v.z * (float)m[2*4 + 1] + (float)m[3*4 + 1], + v.x * (float)m[0*4 + 2] + v.y * (float)m[1*4 + 2] + v.z * (float)m[2*4 + 2] + (float)m[3*4 + 2] ); } diff --git a/KREngine/KREngine/Classes/KRMat4.h b/KREngine/KREngine/Classes/KRMat4.h index faf20dd..83d8039 100644 --- a/KREngine/KREngine/Classes/KRMat4.h +++ b/KREngine/KREngine/Classes/KRMat4.h @@ -81,6 +81,9 @@ public: // Overload compound multiply operator KRMat4& operator*=(const KRMat4 &m); + float& operator[](unsigned i); + float operator[](unsigned i) const; + // Overload multiply operator //KRMat4& operator*(const KRMat4 &m); KRMat4 operator*(const KRMat4 &m); @@ -96,7 +99,8 @@ public: void bias(); bool invert(); void transpose(); - KRVector3 dot(const KRVector3 &v) const; + + static KRVector3 Dot(const KRMat4 &m, const KRVector3 &v); }; #endif // KRMAT4_I \ No newline at end of file diff --git a/KREngine/KREngine/Classes/KRMaterial.cpp b/KREngine/KREngine/Classes/KRMaterial.cpp index 7b976b1..064d06b 100644 --- a/KREngine/KREngine/Classes/KRMaterial.cpp +++ b/KREngine/KREngine/Classes/KRMaterial.cpp @@ -46,10 +46,10 @@ KRMaterial::KRMaterial(const char *szName) : KRResource(szName) { m_pSpecularMap = NULL; m_pNormalMap = NULL; m_pReflectionMap = NULL; - m_ambientColor = KRVector3(0.0f, 0.0f, 0.0f); - m_diffuseColor = KRVector3(1.0f, 1.0f, 1.0f); - m_specularColor = KRVector3(1.0f, 1.0f, 1.0f); - m_reflectionColor = KRVector3(1.0f, 1.0f, 1.0f); + m_ambientColor = KRVector3::Zero(); + m_diffuseColor = KRVector3::One(); + m_specularColor = KRVector3::One(); + m_reflectionColor = KRVector3::One(); m_tr = (GLfloat)0.0f; m_ns = (GLfloat)0.0f; m_ambientMap = ""; diff --git a/KREngine/KREngine/Classes/KRNode.cpp b/KREngine/KREngine/Classes/KRNode.cpp index d2ab5a8..fc5fb20 100644 --- a/KREngine/KREngine/Classes/KRNode.cpp +++ b/KREngine/KREngine/Classes/KRNode.cpp @@ -20,9 +20,9 @@ KRNode::KRNode(std::string name) { m_pExtents = NULL; m_name = name; - m_localScale = KRVector3(1.0f, 1.0f, 1.0f); - m_localRotation = KRVector3(0.0f, 0.0f, 0.0f); - m_localTranslation = KRVector3(0.0f, 0.0f, 0.0f); + m_localScale = KRVector3::One(); + m_localRotation = KRVector3::Zero(); + m_localTranslation = KRVector3::Zero(); m_parentNode = NULL; } diff --git a/KREngine/KREngine/Classes/KRPointLight.cpp b/KREngine/KREngine/Classes/KRPointLight.cpp index a019690..6836640 100644 --- a/KREngine/KREngine/Classes/KRPointLight.cpp +++ b/KREngine/KREngine/Classes/KRPointLight.cpp @@ -61,7 +61,7 @@ void KRPointLight::render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolu KRMat4 matViewToModel = m_modelMatrix * viewMatrix; matViewToModel.invert(); - KRVector3 view_space_light_position = matModelToView2.dot(KRVector3(0.0)); // Origin point of model space is the light source position. No perspective, so no w divide required + KRVector3 view_space_light_position = KRMat4::Dot(matModelToView2, KRVector3::Zero()); // Origin point of model space is the light source position. No perspective, so no w divide required KRBoundingVolume influence_extents = KRBoundingVolume(KRVector3(-1.0), KRVector3(1.0), m_modelMatrix); diff --git a/KREngine/KREngine/Classes/KRVector2.cpp b/KREngine/KREngine/Classes/KRVector2.cpp index ab66e9c..3d24499 100644 --- a/KREngine/KREngine/Classes/KRVector2.cpp +++ b/KREngine/KREngine/Classes/KRVector2.cpp @@ -31,11 +31,11 @@ KRVector2::KRVector2(const KRVector2 &v) { y = v.y; } -KRVector2 KRVector2::ZeroVector() { +KRVector2 KRVector2::Zero() { return KRVector2(0.0f); } -KRVector2 KRVector2::OneVector() { +KRVector2 KRVector2::One() { return KRVector2(1.0f); } diff --git a/KREngine/KREngine/Classes/KRVector2.h b/KREngine/KREngine/Classes/KRVector2.h index 854c8d2..5a9a674 100644 --- a/KREngine/KREngine/Classes/KRVector2.h +++ b/KREngine/KREngine/Classes/KRVector2.h @@ -74,8 +74,8 @@ public: static float Dot(const KRVector2 &v1, const KRVector2 &v2); - static KRVector2 ZeroVector(); - static KRVector2 OneVector(); + static KRVector2 Zero(); + static KRVector2 One(); private: diff --git a/KREngine/KREngine/Classes/KRVector3.cpp b/KREngine/KREngine/Classes/KRVector3.cpp index d89e32a..df083d1 100644 --- a/KREngine/KREngine/Classes/KRVector3.cpp +++ b/KREngine/KREngine/Classes/KRVector3.cpp @@ -47,35 +47,35 @@ KRVector3::KRVector3(const KRVector3 &v) { z = v.z; } -KRVector3 KRVector3::ZeroVector() { +KRVector3 KRVector3::Zero() { return KRVector3(0.0f, 0.0f, 0.0f); } -KRVector3 KRVector3::OneVector() { +KRVector3 KRVector3::One() { return KRVector3(1.0f, 1.0f, 1.0f); } -KRVector3 KRVector3::ForwardVector() { +KRVector3 KRVector3::Forward() { return KRVector3(0.0f, 0.0f, 1.0f); } -KRVector3 KRVector3::BackwardVector() { +KRVector3 KRVector3::Backward() { return KRVector3(0.0f, 0.0f, -1.0f); } -KRVector3 KRVector3::UpVector() { +KRVector3 KRVector3::Up() { return KRVector3(0.0f, 1.0f, 0.0f); } -KRVector3 KRVector3::DownVector() { +KRVector3 KRVector3::Down() { return KRVector3(0.0f, -1.0f, 0.0f); } -KRVector3 KRVector3::LeftVector() { +KRVector3 KRVector3::Left() { return KRVector3(-1.0f, 0.0f, 0.0f); } -KRVector3 KRVector3::RightVector() { +KRVector3 KRVector3::Right() { return KRVector3(1.0f, 0.0f, 0.0f); } diff --git a/KREngine/KREngine/Classes/KRVector3.h b/KREngine/KREngine/Classes/KRVector3.h index 78e9569..4de6d93 100644 --- a/KREngine/KREngine/Classes/KRVector3.h +++ b/KREngine/KREngine/Classes/KRVector3.h @@ -75,14 +75,14 @@ public: static float Dot(const KRVector3 &v1, const KRVector3 &v2); - static KRVector3 ZeroVector(); - static KRVector3 OneVector(); - static KRVector3 ForwardVector(); - static KRVector3 BackwardVector(); - static KRVector3 UpVector(); - static KRVector3 DownVector(); - static KRVector3 LeftVector(); - static KRVector3 RightVector(); + static KRVector3 Zero(); + static KRVector3 One(); + static KRVector3 Forward(); + static KRVector3 Backward(); + static KRVector3 Up(); + static KRVector3 Down(); + static KRVector3 Left(); + static KRVector3 Right(); static KRVector3 Lerp(const KRVector3 &v1, const KRVector3 &v2, float d); static KRVector3 Slerp(const KRVector3 &v1, const KRVector3 &v2, float d); static void OrthoNormalize(KRVector3 &normal, KRVector3 &tangent); // Gram-Schmidt Orthonormalization