mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-03-14 01:10:11 -05:00
Atmosphere Culling System (still not working properly).
This commit is contained in:
@@ -99,8 +99,8 @@ return {
|
||||
--"moon",
|
||||
|
||||
"lodglobes/earth",
|
||||
"lodglobes/mars",
|
||||
"lodglobes/moon",
|
||||
--"lodglobes/mars",
|
||||
--"lodglobes/moon",
|
||||
--"satellites",
|
||||
--"mars-satellites",
|
||||
--"toyvolume",
|
||||
|
||||
@@ -314,121 +314,27 @@ void AtmosphereDeferredcaster::preRaycast(const RenderData & renderData, const D
|
||||
program.setUniform("inscatterTexture", _inScatteringTableTextureUnit);
|
||||
|
||||
// Atmosphere Frustum Culling
|
||||
|
||||
|
||||
// DEBUG:
|
||||
/*
|
||||
if (_renderableClass == RenderablePlanet) {
|
||||
glm::dvec3 objP = glm::dvec3(renderData.position[0] * pow(10, renderData.position[3]),
|
||||
renderData.position[1] * pow(10, renderData.position[3]), renderData.position[2] * pow(10, renderData.position[3]));
|
||||
glm::dvec4 cameraP = glm::inverse(_modelTransform) * glm::dvec4(-objP + renderData.camera.positionVec3(), 1.0);
|
||||
std::cout << "====== Planet's position in KM: " << glm::to_string( objP/glm::dvec3(1000.0, 1000.0, 1000.0) )
|
||||
<< " =======" << std::endl;
|
||||
std::cout << "====== Distance from Planet's ground in KM: "
|
||||
<< glm::length(glm::dvec3(cameraP / glm::dvec4(1000.0, 1000.0, 1000.0, 1.0))) - _atmospherePlanetRadius
|
||||
<< " =======" << std::endl;
|
||||
std::cout << "====== Camera Position: " << glm::to_string(renderData.camera.positionVec3()) << " =====" << std::endl;
|
||||
}
|
||||
else if (_renderableClass == RenderableGlobe) {
|
||||
glm::dvec3 objP = renderData.modelTransform.translation;
|
||||
glm::dvec4 cameraP = glm::inverse(_modelTransform) * glm::dvec4(renderData.camera.positionVec3(), 1);
|
||||
std::cout << "====== Planet's position in KM: " << glm::to_string( objP/glm::dvec3(1000.0, 1000.0, 1000.0) )
|
||||
<< " =======" << std::endl;
|
||||
std::cout << "====== Distance from Planet's ground in KM: "
|
||||
<< glm::length(glm::dvec3(cameraP / glm::dvec4(1000.0, 1000.0, 1000.0, 1.0))) - _atmospherePlanetRadius
|
||||
<< " =======" << std::endl;
|
||||
std::cout << "====== Camera Position: " << glm::to_string(renderData.camera.positionVec3()) << " =====" << std::endl;
|
||||
std::cout << "--- Ellipsoid Radii: " << glm::to_string(_ellipsoidRadii) << " ----" << std::endl;
|
||||
|
||||
// Testing Transformations:
|
||||
//glm::dvec4 tObjCoords = glm::dvec4(0.0); tObjCoords.w = 1.0;
|
||||
//std::cout << "==== Obj Coordinates: " << glm::to_string(tObjCoords) << " ====" << std::endl;
|
||||
//glm::dvec4 tWorldCoords = _modelTransform * tObjCoords;
|
||||
//std::cout << "==== World Coordinates: " << glm::to_string(tWorldCoords) << " ====" << std::endl;
|
||||
//glm::dvec4 tSGCTEyeCoords = renderData.camera.combinedViewMatrix() * tWorldCoords;
|
||||
//std::cout << "==== SGCT Eye Coordinates: " << glm::to_string(tSGCTEyeCoords) << " ====" << std::endl;
|
||||
//glm::dvec4 tSGCTViewCoords = renderData.camera.projectionMatrix() * tSGCTEyeCoords;
|
||||
//std::cout << "==== SGCT View Coordinates: " << glm::to_string(tSGCTViewCoords) << " ====" << std::endl;
|
||||
//glm::dvec4 tSGCTEyeCoordsInv = dInverseProjection * tSGCTViewCoords;
|
||||
//std::cout << "==== SGCT Eye Coordinates Inv: " << glm::to_string(tSGCTEyeCoords) << " ====" << std::endl;
|
||||
//glm::dvec4 tWorldCoordsInv = glm::inverse(renderData.camera.combinedViewMatrix()) * tSGCTEyeCoordsInv;
|
||||
//tWorldCoordsInv /= tWorldCoordsInv.w;
|
||||
//std::cout << "==== World Coordinates Inv: " << glm::to_string(tWorldCoordsInv) << " ====" << std::endl;
|
||||
//glm::dvec4 tObjCoordsInv = glm::inverse(_modelTransform) * tWorldCoordsInv;
|
||||
//std::cout << "==== Obj Coordinates Inv: " << glm::to_string(tObjCoordsInv) << " ====" << std::endl;
|
||||
|
||||
|
||||
////glm::dmat4 cameraTranslation = glm::inverse(glm::translate(glm::dmat4(1.0), static_cast<glm::dvec3>(renderData.camera.positionVec3())));
|
||||
////glm::dmat4 sgctViewMatrix = renderData.camera.viewMatrix();
|
||||
////glm::dmat4 camRotationMatrix = glm::mat4_cast(glm::inverse((glm::dquat)renderData.camera.rotationQuaternion()));
|
||||
|
||||
////glm::dmat4 SGCTEyeToWorld = glm::inverse(cameraTranslation) * glm::inverse(camRotationMatrix) * glm::inverse(sgctViewMatrix);
|
||||
////glm::dvec4 tWorldCoordsInv2 = SGCTEyeToWorld * tSGCTEyeCoordsInv;
|
||||
////tWorldCoordsInv2 /= tWorldCoordsInv2.w;
|
||||
////std::cout << "==== World Coordinates Inv2: " << glm::to_string(tWorldCoordsInv2) << " ====" << std::endl;
|
||||
////glm::dvec4 tObjCoordsInv2 = glm::inverse(_modelTransform) * tWorldCoordsInv2;
|
||||
////std::cout << "==== Obj Coordinates Inv2: " << glm::to_string(tObjCoordsInv2) << " ====" << std::endl;
|
||||
|
||||
|
||||
////glm::dmat4 objTranslation = glm::translate(glm::dmat4(1.0), renderData.modelTransform.translation);
|
||||
////glm::dmat4 objRotation = glm::dmat4(renderData.modelTransform.rotation);
|
||||
////glm::dmat4 objScaling = glm::scale(glm::dmat4(1.0), glm::dvec3(renderData.modelTransform.scale,
|
||||
//// renderData.modelTransform.scale, renderData.modelTransform.scale));
|
||||
|
||||
////glm::dmat4 modelTrans = objTranslation * objRotation * objScaling;
|
||||
|
||||
////std::cout << "==== Obj Coordinates Inv3: " << glm::to_string(glm::inverse(modelTrans) * tWorldCoordsInv) << " ====" << std::endl;
|
||||
|
||||
////glm::dmat4 invModelTrans = glm::inverse(objScaling) * glm::inverse(objRotation) * glm::inverse(objTranslation);
|
||||
|
||||
////std::cout << "==== Obj Coordinates Inv3: " << glm::to_string(invModelTrans * tWorldCoordsInv) << " ====" << std::endl;
|
||||
|
||||
////glm::dvec4 tmp = tWorldCoordsInv + glm::dvec4(-renderData.modelTransform.translation, 0.0);
|
||||
////glm::dvec3 tmp2 = glm::dmat3(glm::transpose(objRotation)) * glm::dvec3(tmp);
|
||||
////glm::dvec3 tmp3 = glm::dmat3(glm::inverse(objScaling)) * tmp2;
|
||||
|
||||
////std::cout << "==== Obj Coordinates Inv4: " << glm::to_string(tmp3) << " ====" << std::endl;
|
||||
|
||||
////glm::dvec4 tmp4 = glm::inverse(sgctViewMatrix) * tSGCTEyeCoordsInv;
|
||||
//////glm::dvec4 tmp5 = glm::transpose(camRotationMatrix) * tmp4;
|
||||
////glm::dvec4 tmp5 = glm::inverse(camRotationMatrix) * tmp4;
|
||||
////glm::dvec3 tWorldCoordsInvHand = glm::dvec3(tmp5) - renderData.camera.positionVec3();
|
||||
////std::cout << "==== World Coordinates Inv3: " << glm::to_string(tWorldCoordsInvHand) << " ====" << std::endl;
|
||||
|
||||
////glm::dvec3 tmp6 = tWorldCoordsInvHand - renderData.modelTransform.translation;
|
||||
////glm::dvec3 tmp7 = glm::dmat3(glm::transpose(objRotation)) * tmp6;
|
||||
////glm::dvec3 tmp8 = glm::dmat3(glm::inverse(objScaling)) * tmp7;
|
||||
////std::cout << "==== Obj Coordinates Inv5: " << glm::to_string(tmp8) << " ====" << std::endl;
|
||||
|
||||
//// Doing it by parts like in RenderablePlanet:
|
||||
//glm::dvec3 cameraPos = renderData.camera.positionVec3();
|
||||
//glm::dmat4 invSGCTEye = glm::inverse(glm::dmat4(renderData.camera.viewMatrix()));
|
||||
//glm::dmat4 invCamRotationMatrix = glm::mat4_cast((glm::dquat)renderData.camera.rotationQuaternion());
|
||||
|
||||
//glm::dvec4 tOSEyeCoordsInv = invSGCTEye * tSGCTEyeCoordsInv;
|
||||
//glm::dvec4 tmpRInv = invCamRotationMatrix * tOSEyeCoordsInv;
|
||||
//glm::dvec4 tOSWorldCoordsInv = glm::dvec4(glm::dvec3(tmpRInv) + cameraPos, 1.0);
|
||||
//std::cout << "==== World Coordinates Inv J: " << glm::to_string(tOSWorldCoordsInv) << " ====" << std::endl;
|
||||
|
||||
//glm::dmat3 objRotationMatInv = glm::transpose(glm::dmat3(renderData.modelTransform.rotation));
|
||||
//glm::dmat4 objScalingMatInv = glm::scale(glm::dvec3(1.0/renderData.modelTransform.scale));
|
||||
|
||||
//glm::dvec4 objTrans = tOSWorldCoordsInv - glm::dvec4(renderData.modelTransform.translation, 0.0);
|
||||
//glm::dvec4 objRot = glm::dvec4(objRotationMatInv * glm::dvec3(objTrans), 1.0);
|
||||
//glm::dvec4 objPosInvFinal = objScalingMatInv * objRot;
|
||||
//std::cout << "==== Obj Coordinates Inv J: " << glm::to_string(objPosInvFinal) << " ====" << std::endl;
|
||||
|
||||
|
||||
//std::cout << "==== Obj Coordinates Inv J2: " << glm::to_string(glm::inverse(_modelTransform) * tOSWorldCoordsInv)
|
||||
// << " ====" << std::endl;
|
||||
|
||||
//std::cout << "\n\n---> ModelTrans: " << glm::to_string(_modelTransform) << std::endl;
|
||||
//std::cout << "\n\n---> ModelTrans2: " << glm::to_string(modelTrans) << std::endl;
|
||||
|
||||
|
||||
}
|
||||
*/
|
||||
glm::dvec4 tPlanetPosObj = glm::dvec4(renderData.position.dvec3(), 1.0);
|
||||
glm::dvec4 tPlanetPosWorld = _modelTransform * tPlanetPosObj;
|
||||
glm::dvec4 tPlanetPosSGCTEyeCoords = renderData.camera.combinedViewMatrix() * tPlanetPosWorld;
|
||||
glm::dvec4 tPlanetPosSGCTViewCoords = renderData.camera.projectionMatrix() * tPlanetPosSGCTEyeCoords;
|
||||
tPlanetPosSGCTViewCoords /= tPlanetPosSGCTViewCoords.w;
|
||||
//tPlanetPosSGCTViewCoords *= -1.0;
|
||||
|
||||
glm::dvec3 perpVec = glm::cross(glm::dvec3(tPlanetPosObj.y, tPlanetPosObj.x, tPlanetPosObj.z), glm::dvec3(tPlanetPosObj));
|
||||
double radius = (_atmosphereRadius + 2.0) * 1000.0;
|
||||
perpVec = glm::normalize(perpVec) * glm::dvec3(radius);
|
||||
glm::dvec4 tPlanetPosSGCTViewCoordsR = glm::dmat4(renderData.camera.projectionMatrix()) * renderData.camera.combinedViewMatrix() *
|
||||
_modelTransform * (tPlanetPosObj + glm::dvec4(perpVec, 0.0));
|
||||
tPlanetPosSGCTViewCoordsR /= tPlanetPosSGCTViewCoordsR.w;
|
||||
//tPlanetPosSGCTViewCoordsR *= -1.0;
|
||||
double dX = tPlanetPosSGCTViewCoords.x - std::max(-1.0, std::min(tPlanetPosSGCTViewCoords.x, 1.0));
|
||||
double dY = (1.0 - tPlanetPosSGCTViewCoords.y) - std::max(-1.0, std::min((1.0 - tPlanetPosSGCTViewCoords.y), 1.0));
|
||||
double dd = glm::distance(tPlanetPosSGCTViewCoords, tPlanetPosSGCTViewCoordsR);
|
||||
std::cout << "----- Circle Center: " << glm::to_string(tPlanetPosSGCTViewCoords) << ", radius: " << dd
|
||||
<< " --------" << std::endl;
|
||||
std::cout << "========= Test In Space: " << ((dX*dX + dY*dY) < (dd*dd))
|
||||
<< " ==========" << std::endl;
|
||||
}
|
||||
|
||||
void AtmosphereDeferredcaster::postRaycast(const RenderData & renderData, const DeferredcastData& deferredData,
|
||||
|
||||
@@ -656,7 +656,7 @@ namespace openspace {
|
||||
_deferredcaster->setMieExtinctionCoefficients(_mieExtinctionCoeff);
|
||||
_deferredcaster->setRenderableClass(_atmosphereType);
|
||||
_deferredcaster->enableSunFollowing(_sunFollowingCameraEnabled);
|
||||
|
||||
//_deferredcaster->setEllipsoidRadii(_ellipsoid.radii());
|
||||
if (executeComputation)
|
||||
_deferredcaster->preCalculateAtmosphereParam();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user