难以在WebGL中实现阴影

问题描述 投票:1回答:1

我正在尝试使用本教程在我的WEBGL 2.0项目中实现阴影https://webgl2fundamentals.org/webgl/lessons/webgl-shadows.html目前,我得到的结果确实很糟糕:enter image description here

基本上,一吨的地形被绘制在不应有的阴影中。光线投射是从您的相机朝向您所看的方向,因此假设您不应该看到任何阴影,因为光线投射与您的相机相同(我只是在进行测试,直到可以正常使用为止)

除了我使用glMatrix而不是它们的矩阵数学库(我认为应该没关系)之外,我的所有东西与我相信的教程相同。这是东西。我不使用模型视图矩阵来渲染任何东西,因此我的所有点都不在-1,1范围内。它们可以出去的距离最大为-3200 ... ect。我认为问题在于我如何创建纹理矩阵

textureMatrix = glMatrix.mat4.create();

glMatrix.mat4.translate(textureMatrix,textureMatrix,[0.5,0.5,0.5]);
glMatrix.mat4.scale(textureMatrix,textureMatrix,[0.5,0.5,0.5]);
glMatrix.mat4.multiply(textureMatrix,textureMatrix, projectionMatrix);

glMatrix.mat4.invert(lightMatrix,lightMatrix);
glMatrix.mat4.multiply(textureMatrix,textureMatrix, lightMatrix);

我正在使用与正常投影相同的矩阵进行光投影,这是一个问题吗?如果有人可以帮助,将不胜感激。

webgl shadow
1个回答
0
投票

这可能是因为对于阴影体积的Z大小(视图中阴影体积的大小),灯光的Y位置(在示例中,它是眼睛与场景之间的距离要大得多)方向。)如果posY在线框内:enter image description here

但是,如果您增加posY过多(即您的形状超出阴影体积,它们就会消失enter image description here

因此,您应该增加阴影体积的大小(或以任何一种方式缩小您的场景。)您无法使用滑块进行模拟,因为它们只是使您可以控制X和Y二维尺寸:projWidth和projHeight。 >

即在教程页面的最后一个代码中,例如,最新参数(“ far”)从10更改为100

const lightProjectionMatrix = settings.perspective
    ? m4.perspective(
        degToRad(settings.fieldOfView),
        settings.projWidth / settings.projHeight,
        0.5,  // near
        10)   // far
    : m4.orthographic(
        -settings.projWidth / 2,   // left
         settings.projWidth / 2,   // right
        -settings.projHeight / 2,  // bottom
         settings.projHeight / 2,  // top
         0.5,                      // near
         100);                      // far

然后您可以增加更多的数量:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.