From ce392b53e640ec7ee0b3ea0faae11b62003ca84a Mon Sep 17 00:00:00 2001 From: Jonathas Costa Date: Mon, 19 Mar 2018 15:17:15 -0400 Subject: [PATCH] Same changes in stereo. --- .../rendering/atmospheredeferredcaster.cpp | 14 ++++++++------ .../shaders/atmosphere_deferred_fs.glsl | 17 ++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/modules/atmosphere/rendering/atmospheredeferredcaster.cpp b/modules/atmosphere/rendering/atmospheredeferredcaster.cpp index d424d386e5..87eb0ee20d 100644 --- a/modules/atmosphere/rendering/atmospheredeferredcaster.cpp +++ b/modules/atmosphere/rendering/atmospheredeferredcaster.cpp @@ -256,14 +256,18 @@ void AtmosphereDeferredcaster::preRaycast(const RenderData& renderData, // SGCT Projection to World Space glm::dmat4 dInverseSgctProjectionToWorldTransformMatrix(dInverseProjectionToTmpRotTransformMatrix); double *mSource = (double*)glm::value_ptr(dInverseSgctProjectionToWorldTransformMatrix); + mSource[12] += renderData.camera.eyePositionVec3().x; mSource[13] += renderData.camera.eyePositionVec3().y; mSource[14] += renderData.camera.eyePositionVec3().z; - /*mSource[12] += renderData.camera.positionVec3().x; + /* + mSource[12] += renderData.camera.positionVec3().x; mSource[13] += renderData.camera.positionVec3().y; - mSource[14] += renderData.camera.positionVec3().z;*/ + mSource[14] += renderData.camera.positionVec3().z; + */ mSource[15] = 1.0; + // SGCT Projection to Object Space glm::dmat4 inverseWholeMatrixPipeline = inverseModelMatrix * dInverseSgctProjectionToWorldTransformMatrix; @@ -271,11 +275,9 @@ void AtmosphereDeferredcaster::preRaycast(const RenderData& renderData, inverseWholeMatrixPipeline); program.setUniform(_uniformCache2.dCamRigPos, renderData.camera.positionVec3()); - program.setUniform("dSGCTEyePosWorld", renderData.camera.eyePositionVec3()); - program.setUniform("dSGCTEyePosObj", inverseModelMatrix * glm::dvec4(renderData.camera.eyePositionVec3(), 1.0)); - //glm::dvec4 camPosObjCoords = inverseModelMatrix * glm::dvec4(renderData.camera.eyePositionVec3(), 1.0); - glm::dvec4 camPosObjCoords = inverseModelMatrix * glm::dvec4(renderData.camera.positionVec3(), 1.0); + glm::dvec4 camPosObjCoords = inverseModelMatrix * glm::dvec4(renderData.camera.eyePositionVec3(), 1.0); + //glm::dvec4 camPosObjCoords = inverseModelMatrix * glm::dvec4(renderData.camera.positionVec3(), 1.0); program.setUniform(_uniformCache2.dCamPosObj, camPosObjCoords); double lt; diff --git a/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl b/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl index 7a2f74a7d0..18c59d8b99 100644 --- a/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl +++ b/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl @@ -89,8 +89,6 @@ uniform dmat4 dModelTransformMatrix; uniform dmat4 dInverseSGCTEyeToTmpRotTransformMatrix; uniform dmat4 dInverseSgctProjectionToModelTransformMatrix; -uniform dvec3 dSGCTEyePosWorld; -uniform dvec4 dSGCTEyePosObj; uniform dvec3 dCamRigPos; uniform dvec4 dCamPosObj; uniform dvec3 sunDirectionObj; @@ -248,7 +246,7 @@ void dCalculateRayRenderableGlobe(in int mssaSample, out dRay ray, // ====================================== // ======= Avoiding Some Matrices ======= - // Compute positions and directions in world space. + // Compute positions and directions in object space. dvec2 samplePos = dvec2(msaaSamplePatter[mssaSample], msaaSamplePatter[mssaSample+1]); dvec4 clipCoords = dvec4((interpolatedNDCPos.xy + samplePos)/ gl_FragCoord.w, 0.0, 1.0); @@ -261,14 +259,15 @@ void dCalculateRayRenderableGlobe(in int mssaSample, out dRay ray, // space results in imprecision. planetPositionObjectCoords = dvec4(0.0, 0.0, 0.0, 1.0); - // Camera Position in Object Space - cameraPositionInObject = dSGCTEyePosObj;//dCamPosObj; + // Camera Position in Object Space (in meters) + cameraPositionInObject = dCamPosObj; // ============================ // ====== Building Ray ======== // Ray in object space (in KM) ray.origin = cameraPositionInObject * dvec4(0.001, 0.001, 0.001, 1.0); - ray.direction = dvec4(normalize(objectCoords.xyz - cameraPositionInObject.xyz), 0.0); + //ray.direction = dvec4(normalize(objectCoords.xyz - cameraPositionInObject.xyz), 0.0); + ray.direction = dvec4(normalize((objectCoords.xyz * dvec3(0.001))- ray.origin.xyz), 0.0); } /* @@ -588,8 +587,8 @@ void main() { cameraPositionInObject); bool insideATM = false; - double offset = 0.0; - double maxLength = 0.0; + double offset = 0.0; // in Km + double maxLength = 0.0; // in Km bool intersectATM = false; @@ -607,7 +606,7 @@ void main() { vec4 normal = texelFetch(mainNormalTexture, fragCoords, i); // Data in the mainPositionTexture are written in view space (view plus camera rig) vec4 position = texelFetch(mainPositionTexture, fragCoords, i); - + // OS Eye to World coords dvec4 tmpRInvPos = dInverseSGCTEyeToTmpRotTransformMatrix * position; dvec4 fragWorldCoords = dvec4(dvec3(tmpRInvPos) + dCamRigPos, 1.0);