opengl顶点着色器中如何实现多重纹理

时间:2021-09-18 19:38:00
每个顶点贴上两个纹理,一个一维的一个三维纹理,具体SetRC()设置如下:
glGenTextures(2, texName);
//   Texture state
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_1D);
glBindTexture(GL_TEXTURE_1D,texName[0]);
         ……
   Create1DcolorTexture();

//  3D-Texture 
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D, texName[1]);
……

在片断部分如此设置(大部分省略了)
    if (useHighLevel)
    {
    GLint uniformLoc = glGetUniformLocationARB(progObj                    [whichShader],  "sampler1");
        if (uniformLoc != -1)
        {
   glUniform1iARB(uniformLoc, 0);
         }
uniformLoc = glGetUniformLocationARB(progObj[whichShader], "sampler0");
        if (uniformLoc != -1)
        {

glUniform1iARB(uniformLoc, 0);
}

然后*fs为:
uniform sampler1D sampler0;
uniform sampler3D sampler1;

void main(void)
{
    vec4 Color;
     Color = texture1D(sampler0, 0.5);//0.5为测试的纹理坐标
     vec4 texel = texture3D(sampler1, gl_TexCoord[0].xyz); 
     gl_FragColor = texel+Color;
}
结果,结果出的结果和固定管道的多维纹理结果根本就不一样,请大家帮忙看一下

2 个解决方案

#1


我要做一个对一个物体贴两个纹理,这两个纹理按一定的比例融合,不知道该如何实现?请教楼主

#2


TO:elit_csj (浪子书军)
这个sampler0和sampler1你怎么都设置成0?这个很奇怪?应该是sampler0是1,sampler1是0如果按你前面的设置的话?
看你写的真有点乱!你这个显然是片段着色器。


TO:rongrongshen(呼啦啦)
你要的这个效果在片段着色器里面很容易实现!

uniform sampler2D sampler0;
uniform sampler2D sampler1;

void main(void)
{
 float alpha = 0.6;
 vec4 Color0,Color1;
 Color0 = texture2D(sampler0, gl_TexCoord[0].xy);
 Color1 = texture2D(sampler0, gl_TexCoord[1].xy);
 gl_FragColor = min( Color0 * alpha + Color1 * (1 - alpha) , 1.0);
}

#1


我要做一个对一个物体贴两个纹理,这两个纹理按一定的比例融合,不知道该如何实现?请教楼主

#2


TO:elit_csj (浪子书军)
这个sampler0和sampler1你怎么都设置成0?这个很奇怪?应该是sampler0是1,sampler1是0如果按你前面的设置的话?
看你写的真有点乱!你这个显然是片段着色器。


TO:rongrongshen(呼啦啦)
你要的这个效果在片段着色器里面很容易实现!

uniform sampler2D sampler0;
uniform sampler2D sampler1;

void main(void)
{
 float alpha = 0.6;
 vec4 Color0,Color1;
 Color0 = texture2D(sampler0, gl_TexCoord[0].xy);
 Color1 = texture2D(sampler0, gl_TexCoord[1].xy);
 gl_FragColor = min( Color0 * alpha + Color1 * (1 - alpha) , 1.0);
}