mirror of
https://github.com/overte-org/overte.git
synced 2025-07-06 00:10:19 +02:00
Merge pull request #7932 from zzmp/fix/shadows
fix shadow box that appears when flying
This commit is contained in:
commit
25e7b9935e
2 changed files with 8 additions and 4 deletions
|
@ -52,17 +52,19 @@ void RenderShadowMap::run(const render::SceneContextPointer& sceneContext, const
|
||||||
batch.setFramebuffer(fbo);
|
batch.setFramebuffer(fbo);
|
||||||
batch.clearFramebuffer(
|
batch.clearFramebuffer(
|
||||||
gpu::Framebuffer::BUFFER_COLOR0 | gpu::Framebuffer::BUFFER_DEPTH,
|
gpu::Framebuffer::BUFFER_COLOR0 | gpu::Framebuffer::BUFFER_DEPTH,
|
||||||
vec4(vec3(1.0, 1.0, 1.0), 1.0), 1.0, 0, true);
|
vec4(vec3(1.0, 1.0, 1.0), 0.0), 1.0, 0, true);
|
||||||
|
|
||||||
batch.setProjectionTransform(shadow.getProjection());
|
batch.setProjectionTransform(shadow.getProjection());
|
||||||
batch.setViewTransform(shadow.getView());
|
batch.setViewTransform(shadow.getView());
|
||||||
|
|
||||||
auto shadowPipeline = _shapePlumber->pickPipeline(args, ShapeKey());
|
auto shadowPipeline = _shapePlumber->pickPipeline(args, ShapeKey());
|
||||||
auto shadowSkinnedPipeline = _shapePlumber->pickPipeline(args, ShapeKey::Builder().withSkinned());
|
auto shadowSkinnedPipeline = _shapePlumber->pickPipeline(args, ShapeKey::Builder().withSkinned());
|
||||||
args->_pipeline = shadowPipeline;
|
|
||||||
batch.setPipeline(shadowPipeline->pipeline);
|
|
||||||
|
|
||||||
std::vector<ShapeKey> skinnedShapeKeys{};
|
std::vector<ShapeKey> skinnedShapeKeys{};
|
||||||
|
|
||||||
|
// Iterate through all inShapes and render the unskinned
|
||||||
|
args->_pipeline = shadowPipeline;
|
||||||
|
batch.setPipeline(shadowPipeline->pipeline);
|
||||||
for (auto items : inShapes) {
|
for (auto items : inShapes) {
|
||||||
if (items.first.isSkinned()) {
|
if (items.first.isSkinned()) {
|
||||||
skinnedShapeKeys.push_back(items.first);
|
skinnedShapeKeys.push_back(items.first);
|
||||||
|
@ -71,6 +73,7 @@ void RenderShadowMap::run(const render::SceneContextPointer& sceneContext, const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reiterate to render the skinned
|
||||||
args->_pipeline = shadowSkinnedPipeline;
|
args->_pipeline = shadowSkinnedPipeline;
|
||||||
batch.setPipeline(shadowSkinnedPipeline->pipeline);
|
batch.setPipeline(shadowSkinnedPipeline->pipeline);
|
||||||
for (const auto& key : skinnedShapeKeys) {
|
for (const auto& key : skinnedShapeKeys) {
|
||||||
|
|
|
@ -87,7 +87,8 @@ float evalShadowAttenuationPCF(vec4 position, vec4 shadowTexcoord) {
|
||||||
float evalShadowAttenuation(vec4 position) {
|
float evalShadowAttenuation(vec4 position) {
|
||||||
vec4 shadowTexcoord = evalShadowTexcoord(position);
|
vec4 shadowTexcoord = evalShadowTexcoord(position);
|
||||||
if (shadowTexcoord.x < 0.0 || shadowTexcoord.x > 1.0 ||
|
if (shadowTexcoord.x < 0.0 || shadowTexcoord.x > 1.0 ||
|
||||||
shadowTexcoord.y < 0.0 || shadowTexcoord.y > 1.0) {
|
shadowTexcoord.y < 0.0 || shadowTexcoord.y > 1.0 ||
|
||||||
|
shadowTexcoord.z < 0.0 || shadowTexcoord.z > 1.0) {
|
||||||
// If a point is not in the map, do not attenuate
|
// If a point is not in the map, do not attenuate
|
||||||
return 1.0;
|
return 1.0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue