首页 > 解决方案 > 如何在相机位置居中定向光深度图?

问题描述

现在我正在我的游戏引擎中使用阴影贴图。在下面的代码中,我计算了定向光源的 View-Projection 矩阵。我有一个固定的投影盒大小(=50),所以现在要在世界中心的各个方向点亮一个盒子(-50; 50)。它工作正常,但我希望它以这样的方式跟随相机,使其位置始终是这个框的中心。这个怎么做?

Matrix4x4 DirectionalLight::GetMatrix() const
{
    Vector3 position = Camera::GetPosition();
    float sizeLx = -this->ProjectionSize;
    float sizeRx = +this->ProjectionSize;
    float sizeLy = -this->ProjectionSize;
    float sizeRy = +this->ProjectionSize;
    float sizeLz = -this->ProjectionSize;
    float sizeRz = +this->ProjectionSize;
    Matrix4x4 OrthoProjection = MakeOrthographicMatrix(sizeLx, sizeRx, sizeLy, sizeRy, sizeLz, sizeRz);
    Matrix4x4 LightView = MakeViewMatrix(
        this->Direction,
        MakeVector3(0.0f, 0.0f, 0.0f),
        MakeVector3(0.0f, 1.0f, 0.0f)
    );
    return OrthoProjection * LightView;
}

我使用 glm 作为数学库,大多数函数是别名/包装器:MakeOrthographicMatrix 是 glm::ortho,MakeViewMatrix 是 glm::lookAt

标签: c++openglgame-developmentglm-math

解决方案


推荐阅读