我有一个浮点值在0.0-1.0范围内的数组(一个高度图),但是纹理返回黑色或红色,我尝试了内部和源格式的多种组合,但是似乎没有任何效果。我当前的代码仅给我红色的纹理是:
glGenTextures(1, &texure);
glBindTexture(GL_TEXTURE_2D, texure);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, w, h, 0, GL_RED, GL_FLOAT, data);
答案 0 :(得分:2)
您必须设置纹理模糊度参数,以处理OpenGL并在查找纹理时从红色通道读取绿色和蓝色通道-请参见glTexParameteri
:
toggleClass
它们是通过计算 如表16.1所示,从滤波后的纹理值Rt,Gt,Bt,At,Lt和It获得基色Cb和Ab,...
operation = 'toggleClass'
表16.1:过滤后的纹理成分与纹理基础成分的对应关系。
...之后,通过纹理参数
来计算Cs的第一部分glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED );
,Texture Base Texture base color Internal Format Cb Ab ... RED (Rt, 0, 0) 1 RG (Rt, Gt, 0) 1 RGB (Rt, Gt, Bt) 1 RGBA (Rt, Gt, Bt) At
,TEXTURE_SWIZZLE_R
和TEXTURE_SWIZZLE_G
的值控制,使Cb的成分变灰。如果TEXTURE_SWIZZLE_B
的值由swizzler表示,则swizzling会根据TEXTURE_SWIZZLE_A
如果您要使用着色器程序,则可以通过Swizzling在片段着色器中执行类似的操作:
TEXTURE_SWIZZLE_R
答案 1 :(得分:0)
在glTexImage2D函数的第7个论点中,您应该设置图像的格式。您将其设置为GL_RED。您应该将其设置为图片的格式,可能是GL_RGB或GL_RGBA。
如果它能正确处理纹理的正确格式,则可能是其他问题。虽然无法分辨看不到其余的代码。
您确定数据加载正确吗? 您是否将适当的纹理坐标发送到片段着色器? 您还记得设置主动纹理吗? 您是否已在片段着色器中将Sampler2D设置为与活动着色器相同的值?