1

基本上,我的程序使用帧缓冲区对象渲染到 3D 纹理。如果我附加到 fbo 的 3D 纹理是 GL_RGB8 格式,即每纹素 24 位,则没有问题。仅使用其中的 8 位。当我尝试使用 GL_ALPHA8(每纹素 8 位)作为 3D 纹理的内部格式时,会出现问题,渲染结果为空白。我用来渲染到 fbo 的 cg 片段着色器如下所示:

void F_PureDecoder(
    float3 vIndexCoord : TEXCOORD0,   
    out float color :COLOR)
{
        ... ...
    color=float4(fL3,fL3,fL3,fL3);
}

我做错了什么还是 fbo 不支持渲染到 8 位纹素纹理?我主要不确定片段着色器的输出格式是否正确。因为帧缓冲区是 8 位,但输出是 24 位。我应该修改片段着色器的输出格式吗?如果是这样,我应该使用什么格式?

非常感谢您的任何意见!

4

1 回答 1

1

要渲染到一个/两个组件纹理,您必须使用 GL_ARB_texture_rg 扩展,它不适用于任何其他格式。请参阅扩展规范以了解为什么它不起作用:

It is also desirable to be able to render to one- and two- 
component format textures using capabilities such as framebuffer 
objects (FBO), but rendering to I/L/LA formats is under-specified
(specifically how to map R/G/B/A values to I/L/A texture channels).

所以,使用 GL_R8 internalFormat。要写入它,只需写入完整的 RGBA 输出,但只会写入 R 分量。

于 2010-09-10T20:29:14.230 回答