From: Peter Schaefer Date: Tue, 3 May 2016 19:50:23 +0000 (+0200) Subject: more Frustum Preps X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=2ec95ee3cf753257611d212b317bea0db73c0df3;p=cgue_weave.git more Frustum Preps Enable Bloom --- diff --git a/Weave/Scene/Camera.cpp b/Weave/Scene/Camera.cpp index 3c18120..93e122a 100644 --- a/Weave/Scene/Camera.cpp +++ b/Weave/Scene/Camera.cpp @@ -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 diff --git a/Weave/Scene/Camera.h b/Weave/Scene/Camera.h index 418dd74..6b17db8 100644 --- a/Weave/Scene/Camera.h +++ b/Weave/Scene/Camera.h @@ -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; diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index 5f45d92..d5909e7 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -82,7 +82,7 @@ lookat(_lookat) fBufferObject::clearBuffer(); - Graphix::disableEffects(EF_BLOOM); + //Graphix::disableEffects(EF_BLOOM); for (int s = 0; s < NELEMS(shader); s++) {