为了支持点光源的阴影贴图,我需要将深度值渲染到立方体贴图的6面。
我的初始化函数如下所示:
public void init(int width, int height) {
fboId = GL30.glGenFramebuffers();
GL11.glEnable(GL13.GL_TEXTURE_CUBE_MAP);
cubeMap = GL11.glGenTextures();
GL11.glBindTexture(GL13.GL_TEXTURE_CUBE_MAP, cubeMap);
GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP,
GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP,
GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_WRAP_S,
GL11.GL_CLAMP);
GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_WRAP_T,
GL11.GL_CLAMP);
GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL12.GL_TEXTURE_WRAP_R,
GL11.GL_CLAMP);
for (int i = 0; i < 6; i++)
GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
GL14.GL_DEPTH_COMPONENT32, width, height, 0,
GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (FloatBuffer) null);
GL11.glBindTexture(GL13.GL_TEXTURE_CUBE_MAP, 0);
}
这是我用来将立方体贴图的一侧绑定到我的FBO的函数:
public void bindForWriting(int target) {
// target is GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X etc.
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, fboId);
GL30.glFramebufferTexture2D(GL30.GL_DRAW_FRAMEBUFFER,
GL30.GL_DEPTH_ATTACHMENT, target, cubeMap, 0);
// Disable writes to the color buffer.
GL11.glDrawBuffer(GL11.GL_NONE);
int fboStat = GL30.glCheckFramebufferStatus(GL30.GL_DRAW_FRAMEBUFFER);
if (fboStat != GL30.GL_FRAMEBUFFER_COMPLETE) {
// fboStat is always == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
}
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
}
不幸的是,FBO并不完整,我不知道为什么。的Khronos的网站说:“不是所有的帧缓冲器附连点是帧缓冲器附着完成,这意味着附加有渲染或纹理的至少一个附接点有其附加的对象不再存在或具有为零的宽度或高度的附加的图像。 ,或者颜色附着点附着了不可渲染的图像,深度附着点附着了不可深度渲染的图像,或者模板附着点附着了不可渲染的图像。包括GL_RGBA4,GL_RGB5_A1和GL_RGB565。GL_DEPTH_COMPONENT16是唯一的深度可渲染格式。GL_STENCIL_INDEX8是唯一的可模板渲染格式。
我没有销毁多维数据集贴图,并且width / height>0。我看不到为什么GL_DEPTH_COMPONENT16是唯一的深度可渲染格式,因为我用于点光源阴影贴图的FBO在GL_DEPTH_COMPONENT32上可以正常工作。如果我将其更改为GL_DEPTH_COMPONENT16,仍然会发生相同的错误。
有什么建议吗?
我发现了问题:
如果target是六个立方体贴图2D图像目标之一,并且width和height参数不相等,则生成GL_INVALID_ENUM 。来源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句