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);
}
这个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);
}
这个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);
}