mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-10 23:07:23 +02:00
Tie shadow frustum to boom offset
This commit is contained in:
parent
f4925d72ed
commit
2da2bc60db
3 changed files with 11 additions and 9 deletions
|
@ -1380,10 +1380,12 @@ void Application::paintGL() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glm::vec3 boomOffset;
|
||||||
{
|
{
|
||||||
PerformanceTimer perfTimer("CameraUpdates");
|
PerformanceTimer perfTimer("CameraUpdates");
|
||||||
|
|
||||||
auto myAvatar = getMyAvatar();
|
auto myAvatar = getMyAvatar();
|
||||||
|
boomOffset = myAvatar->getScale() * myAvatar->getBoomLength() * -IDENTITY_FRONT;
|
||||||
|
|
||||||
myAvatar->startCapture();
|
myAvatar->startCapture();
|
||||||
if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON || _myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) {
|
if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON || _myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) {
|
||||||
|
@ -1411,18 +1413,16 @@ void Application::paintGL() {
|
||||||
if (isHMDMode()) {
|
if (isHMDMode()) {
|
||||||
auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
||||||
_myCamera.setRotation(glm::normalize(glm::quat_cast(hmdWorldMat)));
|
_myCamera.setRotation(glm::normalize(glm::quat_cast(hmdWorldMat)));
|
||||||
auto worldBoomOffset = myAvatar->getOrientation() * (myAvatar->getScale() * myAvatar->getBoomLength() * glm::vec3(0.0f, 0.0f, 1.0f));
|
_myCamera.setPosition(extractTranslation(hmdWorldMat) +
|
||||||
_myCamera.setPosition(extractTranslation(hmdWorldMat) + worldBoomOffset);
|
myAvatar->getOrientation() * boomOffset);
|
||||||
} else {
|
} else {
|
||||||
_myCamera.setRotation(myAvatar->getHead()->getOrientation());
|
_myCamera.setRotation(myAvatar->getHead()->getOrientation());
|
||||||
if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) {
|
if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) {
|
||||||
_myCamera.setPosition(myAvatar->getDefaultEyePosition()
|
_myCamera.setPosition(myAvatar->getDefaultEyePosition()
|
||||||
+ _myCamera.getRotation()
|
+ _myCamera.getRotation() * boomOffset);
|
||||||
* (myAvatar->getScale() * myAvatar->getBoomLength() * glm::vec3(0.0f, 0.0f, 1.0f)));
|
|
||||||
} else {
|
} else {
|
||||||
_myCamera.setPosition(myAvatar->getDefaultEyePosition()
|
_myCamera.setPosition(myAvatar->getDefaultEyePosition()
|
||||||
+ myAvatar->getOrientation()
|
+ myAvatar->getOrientation() * boomOffset);
|
||||||
* (myAvatar->getScale() * myAvatar->getBoomLength() * glm::vec3(0.0f, 0.0f, 1.0f)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) {
|
} else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) {
|
||||||
|
@ -1488,6 +1488,7 @@ void Application::paintGL() {
|
||||||
{
|
{
|
||||||
PROFILE_RANGE(__FUNCTION__ "/mainRender");
|
PROFILE_RANGE(__FUNCTION__ "/mainRender");
|
||||||
PerformanceTimer perfTimer("mainRender");
|
PerformanceTimer perfTimer("mainRender");
|
||||||
|
renderArgs._boomOffset = boomOffset;
|
||||||
// Viewport is assigned to the size of the framebuffer
|
// Viewport is assigned to the size of the framebuffer
|
||||||
renderArgs._viewport = ivec4(0, 0, size.width(), size.height());
|
renderArgs._viewport = ivec4(0, 0, size.width(), size.height());
|
||||||
if (displayPlugin->isStereo()) {
|
if (displayPlugin->isStereo()) {
|
||||||
|
|
|
@ -146,9 +146,9 @@ void RenderShadowTask::run(const SceneContextPointer& sceneContext, const render
|
||||||
RenderArgs::RenderMode mode = args->_renderMode;
|
RenderArgs::RenderMode mode = args->_renderMode;
|
||||||
|
|
||||||
auto nearClip = viewFrustum->getNearClip();
|
auto nearClip = viewFrustum->getNearClip();
|
||||||
const int SHADOW_NEAR_DEPTH = -2;
|
float nearDepth = -args->_boomOffset.z;
|
||||||
const int SHADOW_FAR_DEPTH = 20;
|
const int SHADOW_FAR_DEPTH = 20;
|
||||||
globalLight->shadow.setKeylightFrustum(viewFrustum, nearClip + SHADOW_NEAR_DEPTH, nearClip + SHADOW_FAR_DEPTH);
|
globalLight->shadow.setKeylightFrustum(viewFrustum, nearDepth, nearClip + SHADOW_FAR_DEPTH);
|
||||||
|
|
||||||
// Set the keylight render args
|
// Set the keylight render args
|
||||||
args->_viewFrustum = globalLight->shadow.getFrustum().get();
|
args->_viewFrustum = globalLight->shadow.getFrustum().get();
|
||||||
|
|
|
@ -105,7 +105,8 @@ public:
|
||||||
std::shared_ptr<render::ShapePipeline> _pipeline = nullptr;
|
std::shared_ptr<render::ShapePipeline> _pipeline = nullptr;
|
||||||
OctreeRenderer* _renderer = nullptr;
|
OctreeRenderer* _renderer = nullptr;
|
||||||
ViewFrustum* _viewFrustum = nullptr;
|
ViewFrustum* _viewFrustum = nullptr;
|
||||||
glm::ivec4 _viewport{ 0, 0, 1, 1 };
|
glm::ivec4 _viewport{ 0.0f, 0.0f, 1.0f, 1.0f };
|
||||||
|
glm::vec3 _boomOffset{ 0.0f, 0.0f, 1.0f };
|
||||||
float _sizeScale = 1.0f;
|
float _sizeScale = 1.0f;
|
||||||
int _boundaryLevelAdjust = 0;
|
int _boundaryLevelAdjust = 0;
|
||||||
RenderMode _renderMode = DEFAULT_RENDER_MODE;
|
RenderMode _renderMode = DEFAULT_RENDER_MODE;
|
||||||
|
|
Loading…
Reference in a new issue