c++ - 如何在相机位置居中定向光深度图?
问题描述
现在我正在我的游戏引擎中使用阴影贴图。在下面的代码中,我计算了定向光源的 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
解决方案
推荐阅读
- javascript - fs.writeFile 每次调用时都开始新行
- javascript - 如何在课堂上访问“文档”?
- node.js - 使用 passport.js 的 Active Directory B2C 的 NodeJS 身份验证问题
- e-commerce - 为新网站推荐合适的电子商务平台
- python - 在 boolean == true 时运行循环
- google-cloud-platform - 下一期 - SuiteCRM
- python - 有人可以告诉我我的代码有什么问题吗?
- selenium - 如何使用 selenium web 驱动程序定位元素
- oauth-2.0 - 解析 jwt 令牌时需要澄清
- php - 数据库中的搜索字段(mqsql/php)