我如何得到我的纹理绑定正确的多纹理



我试图将彩色文本呈现到屏幕上。我有一个包含要显示的文本的黑色(RGBA 0,0,0,255)表示的纹理,我有另一个包含我想要呈现文本的颜色模式的纹理。这应该是一个相当简单的多纹理练习,但我似乎不能得到第二个纹理工作。这两种纹理都是矩形纹理,因为整数坐标值更容易使用。

渲染代码:

glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, TextHandle);
glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, ColorsHandle);
glBegin(GL_QUADS);
  glMultiTexCoord2iARB(GL_TEXTURE0_ARB, 0, 0);
  glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left, colorRect.Top);
  glVertex2f(x, y);
  glMultiTexCoord2iARB(GL_TEXTURE0_ARB, 0, textRect.Height);
  glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left, colorRect.Top + colorRect.Height);
  glVertex2f(x, y + textRect.Height);
  glMultiTexCoord2iARB(GL_TEXTURE0_ARB, textRect.Width, textRect.Height);
  glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left + colorRect.Width, colorRect.Top + colorRect.Height);
  glVertex2f(x + textRect.Width, y + textRect.Height);
  glMultiTexCoord2iARB(GL_TEXTURE0_ARB, textRect.Width, 0);
  glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left + colorRect.Width, colorRect.Top);
  glVertex2f(x + textRect.Width, y);
glEnd;

顶点着色器:

void main()
{
   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
   gl_TexCoord[0] = gl_MultiTexCoord0;
   gl_TexCoord[1] = gl_MultiTexCoord1;
}

片段着色器:

uniform sampler2DRect texAlpha;
uniform sampler2DRect texRGB;
void main()
{   
   float alpha = texture2DRect(texAlpha, gl_TexCoord[0].st).a;
   vec3 rgb = texture2DRect(texRGB, gl_TexCoord[1].st).rgb;
   gl_FragColor = vec4(rgb, alpha);
}

这看起来很简单,但它最终呈现纯黑色文本而不是彩色文本。如果片段着色器的最后一行读取gl_FragColor = texture2DRect(texAlpha, gl_TexCoord[0].st);,我得到完全相同的结果。将最后一行更改为gl_FragColor = texture2DRect(texRGB, gl_TexCoord[1].st);会导致它根本不呈现任何内容。

基于此,似乎在texRGB上调用texture2DRect总是返回(0,0,0,0).我已经确保GL_MULTISAMPLE是启用的,并在单元1上绑定纹理,但无论出于何种原因,我似乎实际上无法访问它在我的片段着色器内。我做错了什么?

工作服看起来不错。单元1的文本可能是混乱的,导致在纹理的有色部分之外采样。

您的颜色纹理是否充分填充了颜色?

你说的"使它什么也不呈现"是什么意思?? 除非颜色纹理的alpha通道设置为0,否则不应该发生这种情况。

您是否尝试使用以下代码来覆盖alpha通道?

  gl_FragColor = vec4( texture2DRect(texRGB, gl_TexCoord[1].st).rgb, 1.0 );

您确定字体轮廓纹理包含有效的alpha值吗?你说纹理是黑白的,但是你使用的是alpha值!与其使用a组件,不如尝试使用r组件。

混合影响片段着色器输出:它将这个片段的颜色与相应的颜色混合。

相关内容

  • 没有找到相关文章