首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectX 11点灯光阴影

DirectX 11点灯光阴影
EN

Stack Overflow用户
提问于 2019-12-31 06:57:33
回答 1查看 689关注 0票数 3

我正在努力在DirectX 11中使用立方体阴影贴图实现点光源阴影。我到处寻找,似乎只有OpenGL或早期版本的DirectX中的教程。我已经使用CreateTexture2D(),CreateDepthStencilView()和CreateShaderResourceView()设置了一个阴影贴图纹理,在可能的情况下使用TextureCube标志。然后,我不确定如何为立方体贴图的每个面添加不同的‘相机’位置,以及如何计算视图/投影矩阵。我目前有适用于聚光灯/平行光的阴影,但我以前从未使用过立方体贴图。我只是需要一些东西让我开始。提前谢谢你。

编辑:我目前有一个D3D11_TEXTURE2D_DESC变量来创建阴影纹理作为TEXTURECUBE;使用D3D11_DEPTH_STENCIL_VIEW_DESC创建了一个深度模板,并且使用D3D11_SHADER_RESOURCE_VIEW_DESC创建了一个着色器资源视图。我希望他的已经创造了立方图纹理。我不确定如何使用每个面的视图/投影矩阵初始化它,然后将其传递给顶点或可能的几何着色器。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-12-31 07:26:10

对于每个点光源,您应该渲染6个立方体贴图面,如下所示:相机的位置就是点光源的位置。你应该使用透视投影和纵横比1和90度视野。摄影机的方向取决于要渲染的立方体贴图面。我使用了这样的东西:

代码语言:javascript
复制
switch (faceId)
{
case 0:
    // right
    return glm::vec3(1.0f, 0.0f, 0.0f);
case 1:
    // left
    return glm::vec3(-1.0f, 0.0f, 0.0f);
case 2:
    // up
    return glm::vec3(0.0f, 1.0f, 0.0f);
case 3:
    // down
    return glm::vec3(0.0f, -1.0f, 0.0f);
case 4:
    // front
    return glm::vec3(0.0f, 0.0f, 1.0f);
case 5:
    // back 
    return glm::vec3(0.0f, 0.0f, -1.0f); // ok
}

对于摄影机上方向向量:

代码语言:javascript
复制
switch (faceId)
{
case 0:
case 1:
case 4:
case 5:
    return glm::vec3(0.0f, 1.0f, 0.0f);
case 2:
    return glm::vec3(0.0f, 0.0f, -1.0f);
case 3:
    return glm::vec3(0.0f, 0.0f, 1.0f);
}

我也建议从你的着色器中写出线性深度。这将使阴影测试变得容易得多。对于阴影贴图,只需使用立方体贴图采样器的点光源的方向,并比较(线性)距离。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59537726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档