]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
more Frustum Preps
authorPeter Schaefer <schaeferpm@gmail.com>
Tue, 3 May 2016 19:50:23 +0000 (21:50 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Tue, 3 May 2016 19:50:23 +0000 (21:50 +0200)
Enable Bloom

Weave/Scene/Camera.cpp
Weave/Scene/Camera.h
Weave/Scene/Scene.cpp

index 3c18120f1a6107a2b6805414aa9ff68fc7903823..93e122ac023067612260a0f03cf631e11b817e58 100644 (file)
@@ -38,7 +38,7 @@ void Camera::useCamera() const
 
 void Camera::useView() const
 {
-       Shader::getShader(SH_ACTIVE)->setUniformLocation("uView", lookAt(cPosition - dist* cFront,cPosition, cUpVector));
+       Shader::getShader(SH_ACTIVE)->setUniformLocation("uView", lookAt(cCenter,cPosition, cUpVector));
 }
 
 void Camera::useProjection() const
@@ -54,6 +54,7 @@ void Camera::updateView(const vec3& _target)
                return;
 
        cPosition = _target;
+       cCenter = _target - dist* cFront;
 }
 
 void Camera::updateView_pitch(float _pitch)
@@ -110,9 +111,26 @@ void Camera::updateProjection(float _yFov, float _xyRatio, float _zNear, float _
        projection = perspective(yFov, xyRatio, zNear, zFar);
 }
 
-bool Camera::frustum_sphere(vec3 center, float radius)
+Camera::FC_stat Camera::frustum_sphere(vec3 _center, float _radius)
 {
-       return false;
+       vec3 v(_center - cCenter);
+       vec3 pVCam(dot(v,cRight), dot(v,cUpVector), dot(v,cFront));
+
+       if (_radius != 0) {
+               if (pVCam.z > zFar || pVCam.z < zNear)
+                       return FC_OUTSIDE;
+       }
+       else
+       {
+               if (pVCam.z > zFar + _radius || pVCam.z < zNear - _radius)
+                       return FC_OUTSIDE;
+
+               if (pVCam.z > zFar - _radius || pVCam.z < zNear + _radius)
+                       return FC_INTERSECT;
+       }
+
+
+       return FC_INSIDE;
 }
 
 void Camera::updateVectors()
@@ -122,7 +140,8 @@ void Camera::updateVectors()
        cFront.z = sin(yaw*(float)M_PI_2) * cos(pitch*(float)M_2_PI);
        cFront = normalize(cFront);
 
-
        cRight = normalize(cross(cFront, WORLD_UP));
        cUpVector = normalize(cross(cRight, cFront));
+
+       cCenter = cPosition - dist* cFront;
 }
\ No newline at end of file
index 418dd74d702ed0076dcd9e06a4fb7cab701c27b3..6b17db86e8450bb5664217742567dc6d54664b1f 100644 (file)
@@ -31,8 +31,13 @@ public:
        vec3 getWorldDirection() { return normalize(vec3(cFront.x, 0.f, cFront.z)); }
        vec3 getWorldRight() { return normalize(vec3(cRight.x, 0.f, cRight.z)); }
 
-       bool frustum_sphere(vec3 center, float radius = 0.f);
+       enum FC_stat {
+               FC_OUTSIDE,
+               FC_INTERSECT,
+               FC_INSIDE
+       };
 
+       FC_stat frustum_sphere(vec3 center, float radius = 0.f);
 
 protected:
 
@@ -43,7 +48,7 @@ protected:
        mat4 projection = mat4(1.f);
 
        /*View*/
-       vec3 cPosition, cFront, cUpVector, cRight;
+       vec3 cPosition, cCenter, cFront, cUpVector, cRight;
        float pitch, yaw;
        float dist;
        
index 5f45d927c63c2744233981d57dad20be2ae4dae2..d5909e7e112d5eb3d11bbfa4df3650c3b8d7ead2 100644 (file)
@@ -82,7 +82,7 @@ lookat(_lookat)
 
        fBufferObject::clearBuffer();
 
-       Graphix::disableEffects(EF_BLOOM);
+       //Graphix::disableEffects(EF_BLOOM);
 
        for (int s = 0; s < NELEMS(shader); s++)
        {