因此,经过努力使定向光影贴图最终工作后,我可以看到在四边形上渲染的阴影贴图,但它仅以深度self
和类型GL_DEPTH_COMPONENT16
或{{1}绘制}并输入GL_UNSIGNED_SHORT
但它是红色比例而不是灰度
问题是我使用了很多方法来计算绘制阴影的深度,但没有出现阴影。
GL_DEPTH_COMPONENT32F
,片段是:
GL_FLOAT
答案 0 :(得分:3)
...但它是红色比例而不是灰度
具有深度成分格式的纹理(例如GL_DEPTH_COMPONENT16
或GL_DEPTH_COMPONENT32F
只有1个颜色通道,红色颜色通道。
如果从纹理采样器中读取深度分量纹理的数据,则会自动设置绿色,蓝色和alpha通道。
Khronos集团的Image Format规范说:
图像格式不必存储每个组件。当着色器对这样的纹理进行采样时,它仍将解析为4值RGBA向量。未以图像格式存储的组件将自动填写。如果缺少R,G或B,则使用零,而丢失的Alpha总是解析为1.
注意:纹理调整可以改变缺失值。< / p>
因此,设置了红色,绿色和蓝色设置为0,alpha通道为1.导致不透明的红色表面。
如果要从深度组件纹理中读取灰度颜色,则必须读取红色颜色通道,并且必须将红色通道应用于绿色和蓝色。
你必须调整这样的代码:
float depth = texture( shadowMap, ..... ).r;
vec3 depthGrayscale = vec3( depth );
或者这个:
vec3 depthGrayscale = texture( shadowMap, ..... ).rrr;