mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 13:28:09 +02:00
trying to ge the shadow to render correctly
This commit is contained in:
parent
e9360a77f2
commit
687c76a6f8
4 changed files with 19 additions and 7 deletions
|
@ -2564,7 +2564,9 @@ void Application::updateShadowMap() {
|
||||||
glm::ortho(minima.x, maxima.x, minima.y, maxima.y, -maxima.z, -minima.z) * glm::mat4_cast(inverseRotation));
|
glm::ortho(minima.x, maxima.x, minima.y, maxima.y, -maxima.z, -minima.z) * glm::mat4_cast(inverseRotation));
|
||||||
|
|
||||||
// update the shadow view frustum
|
// update the shadow view frustum
|
||||||
_shadowViewFrustum.setPosition(rotation * ((minima + maxima) * 0.5f));
|
// glm::vec3 shadowFrustumCenter = glm::vec3((minima.x + maxima.x) * 0.5f, (minima.y + maxima.y) * 0.5f, (minima.z + maxima.z) * 0.5f);
|
||||||
|
glm::vec3 shadowFrustumCenter = rotation * ((minima + maxima) * 0.5f);
|
||||||
|
_shadowViewFrustum.setPosition(shadowFrustumCenter);
|
||||||
_shadowViewFrustum.setOrientation(rotation);
|
_shadowViewFrustum.setOrientation(rotation);
|
||||||
_shadowViewFrustum.setOrthographic(true);
|
_shadowViewFrustum.setOrthographic(true);
|
||||||
_shadowViewFrustum.setWidth(maxima.x - minima.x);
|
_shadowViewFrustum.setWidth(maxima.x - minima.x);
|
||||||
|
@ -2594,8 +2596,10 @@ void Application::updateShadowMap() {
|
||||||
// this is what is used for rendering the Entities and avatars
|
// this is what is used for rendering the Entities and avatars
|
||||||
Transform viewTransform;
|
Transform viewTransform;
|
||||||
viewTransform.setRotation(rotation);
|
viewTransform.setRotation(rotation);
|
||||||
|
// viewTransform.postTranslate(shadowFrustumCenter);
|
||||||
setViewTransform(viewTransform);
|
setViewTransform(viewTransform);
|
||||||
|
|
||||||
|
|
||||||
glEnable(GL_POLYGON_OFFSET_FILL);
|
glEnable(GL_POLYGON_OFFSET_FILL);
|
||||||
glPolygonOffset(1.1f, 4.0f); // magic numbers courtesy http://www.eecs.berkeley.edu/~ravir/6160/papers/shadowmaps.ppt
|
glPolygonOffset(1.1f, 4.0f); // magic numbers courtesy http://www.eecs.berkeley.edu/~ravir/6160/papers/shadowmaps.ppt
|
||||||
|
|
||||||
|
|
|
@ -577,6 +577,10 @@ void ViewFrustum::computeOffAxisFrustum(float& left, float& right, float& bottom
|
||||||
// compute our dimensions the usual way
|
// compute our dimensions the usual way
|
||||||
float hheight = _nearClip * tanf(_fieldOfView * 0.5f * RADIANS_PER_DEGREE);
|
float hheight = _nearClip * tanf(_fieldOfView * 0.5f * RADIANS_PER_DEGREE);
|
||||||
float hwidth = _aspectRatio * hheight;
|
float hwidth = _aspectRatio * hheight;
|
||||||
|
if (isOrthographic()) {
|
||||||
|
hheight = getHeight();
|
||||||
|
hwidth = getWidth();
|
||||||
|
}
|
||||||
|
|
||||||
// get our frustum corners in view space
|
// get our frustum corners in view space
|
||||||
glm::mat4 eyeMatrix = glm::mat4_cast(glm::inverse(_eyeOffsetOrientation)) * glm::translate(-_eyeOffsetPosition);
|
glm::mat4 eyeMatrix = glm::mat4_cast(glm::inverse(_eyeOffsetOrientation)) * glm::translate(-_eyeOffsetPosition);
|
||||||
|
@ -868,18 +872,18 @@ float ViewFrustum::distanceToCamera(const glm::vec3& point) const {
|
||||||
|
|
||||||
void ViewFrustum::evalProjectionMatrix(glm::mat4& proj) const {
|
void ViewFrustum::evalProjectionMatrix(glm::mat4& proj) const {
|
||||||
if (isOrthographic()) {
|
if (isOrthographic()) {
|
||||||
float left, right, bottom, top, near, far;
|
glm::vec3 frustumCenter = glm::inverse( _orientation) * _position;
|
||||||
glm::vec4 clip0, clip1;
|
|
||||||
computeOffAxisFrustum(left, right, bottom, top, near, far, clip0, clip1);
|
|
||||||
|
|
||||||
proj = glm::ortho(left, right, bottom, top);
|
proj = glm::ortho(frustumCenter.x -0.5f * getWidth(),
|
||||||
proj = glm::ortho(-0.5f * getWidth(), +0.5f * getWidth(), -0.5f * getWidth(), +0.5f * getWidth());
|
frustumCenter.x +0.5f * getWidth(),
|
||||||
|
frustumCenter.y -0.5f * getHeight(),
|
||||||
|
frustumCenter.y +0.5f * getHeight(),
|
||||||
|
-getFarClip(), -getNearClip());
|
||||||
} else {
|
} else {
|
||||||
float left, right, bottom, top, near, far;
|
float left, right, bottom, top, near, far;
|
||||||
glm::vec4 clip0, clip1;
|
glm::vec4 clip0, clip1;
|
||||||
computeOffAxisFrustum(left, right, bottom, top, near, far, clip0, clip1);
|
computeOffAxisFrustum(left, right, bottom, top, near, far, clip0, clip1);
|
||||||
proj = glm::perspective(glm::radians(getFieldOfView()), getAspectRatio(), getNearClip(), getFarClip());
|
proj = glm::perspective(glm::radians(getFieldOfView()), getAspectRatio(), getNearClip(), getFarClip());
|
||||||
// proj = glm::perspective(getFieldOfView() * 0.5f, getAspectRatio(), getNearClip(), getFarClip());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,8 @@ uniform vec3 shadowDistances;
|
||||||
// the inverse of the size of the shadow map
|
// the inverse of the size of the shadow map
|
||||||
uniform float shadowScale;
|
uniform float shadowScale;
|
||||||
|
|
||||||
|
uniform mat4 shadowMatrices[4];
|
||||||
|
|
||||||
vec2 samples[8] = vec2[8](
|
vec2 samples[8] = vec2[8](
|
||||||
vec2(-2.0, -2.0),
|
vec2(-2.0, -2.0),
|
||||||
vec2(2.0, -2.0),
|
vec2(2.0, -2.0),
|
||||||
|
|
|
@ -46,4 +46,6 @@ void main(void) {
|
||||||
|
|
||||||
gl_FragColor = vec4(color, frag.normalVal.a);
|
gl_FragColor = vec4(color, frag.normalVal.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gl_FragColor = vec4(vec3(shadowAttenuation), 1.0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue