0

我正在尝试将一些 32 位浮点数据发送到着色器,但结果不稳定。如果我用全白 (1,1,1,1) 进行测试,则这些值都为零。这是我创建纹理的代码:

gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, 512, 512, 0, GL.GL_RGBA, GL.GL_FLOAT, data);

并在 GLSL 中读取它:

uniform sampler2D u_tex1;

varying vec2 v_uv;

void main()
{
    gl_FragColor = texture2D(u_tex1, v_uv);
}

如果我将纹理设置为随机值,则会出现一些东西,但这是不正确的。这是从 RGBA32F 纹理读取的正确方法还是我遗漏了什么?

4

1 回答 1

0

你没有提供太多关于你所做的事情的信息<你显示的代码是正确的。

我能想到的一些事情可能是错误的:

  • data没有正确的数据(那里有浮动吗?)
  • 你的纹理没有被正确过滤(因为你只提供了 1 个 mip 级别,你需要禁用 mipmapping)
  • 您的纹理未绑定到采样器的纹理单元u_tex1(因此您可能无法从中获取)。
  • 您的纹理坐标不是您认为的那样(并且,根据您的钳制/包裹模式,这可能会导致纹素不是白色的。使用GL_CLAMP_TO_EDGEGL_REPEAT不与纹理边框交互)

有很多方法可以让纹理不工作,我希望我能在这个列表中找到正确的方法!

于 2009-12-22T13:21:52.783 回答