Bìn*_*yên 2 opengl shadow shadow-mapping
我对阴影贴图中的偏差矩阵感到困惑.根据这个问题:阴影映射中的偏置矩阵,偏置矩阵用于缩小并转换为[0..1] x和[0..1] y.所以我认为如果我们不使用偏置矩阵,纹理只会被1/4场景大小填充?真的吗?或者这里有一些魔力吗?
不完全,但结果是一样的.作为你联系的问题的答案说.在w划分后,您的坐标位于NDC空间中,在[-1,1](x,y和z)范围内.现在,当您从纹理中采样时,您应该给出的坐标位于"纹理空间"中,而OpenGL将该空间定义为[0,1]范围(至少对于2D纹理).x = 0 y = 0是纹理的左下角,x = 1 y = 1是纹理的右上角.
这意味着,当您要从渲染的深度纹理进行采样时,必须将计算出的纹理坐标从[-1,1]转换为[0,1].如果不这样做,纹理会很好,但只有四分之一的坐标会落在你实际想要采样的范围内.
您不希望将要渲染的对象偏向深度纹理,因为OpenGL会将坐标从NDC转换为窗口坐标(在这种情况下,窗口是您的纹理,glViewport
用于正确的转换).
要将偏差应用于纹理坐标,您可以使用纹理偏差矩阵,并将其乘以投影矩阵,因此着色器不必担心它.您链接的帖子已经给出了该矩阵:
const GLdouble bias[16] = {
0.5, 0.0, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0,
0.0, 0.0, 0.5, 0.0,
0.5, 0.5, 0.5, 1.0};
Run Code Online (Sandbox Code Playgroud)
如果您的矩阵是列主要的,则此矩阵应将[-1,1]转换为[0,1],它将首先乘以0.5然后再加0.5.如果你的矩阵是行主要的,你应该简单地转置矩阵,你就可以了.
希望这有帮助.
归档时间: |
|
查看次数: |
2022 次 |
最近记录: |