我在修改一段程序时,在片元着色器中混合两个材质的颜色时报错,由于OpenGL版本较老,没找到相关解释。
具体是这样的:
基础的颜色是一个叫baseColor的变量,它是从一张1D贴图上取样下来的:
vec4 baseColor=texture1D(heightColorMapSampler,heightColorMapTexCoord);
这个heightColorMapTexCoord坐标是通过顶点坐标计算来的,好像是OpenGL里一个很老的方式了:
uniform mat4 depthProjection;
.........
.........
vec4 vertexDic=gl_Vertex;
vec4 vertexCc=depthProjection*vertexDic;
heightColorMapTexCoord=dot(heightColorMapPlaneEq,vertexCc);
以上是定点着色器里的代码,然后我在片元着色器加入了一张新的材质,尝试把baseColor这个颜色和我加进来的材质做一个混合,我先这样做试了一下自己加的材质是否成功的导入进来了:
vec4 mycolor = vec4(texture2DRect(mapSampler,gl_FragCoord.xy).rgb, 1.0);
baseColor =mycolor;
发现我导入的材质完全覆盖了之前渲染的结果,这正是我想要的效果。然后我用一个mix函数,把上面两行代码改成下面这样,希望可以混合baseColor和我自己的贴图颜色。
vec4 mycolor = vec4(texture2DRect(mapSampler,gl_FragCoord.xy).rgb, 1.0);
baseColor =mix(baseColor, mycolor, 0.5);
结果就报错了:Invalid operation。
我以为baseColor是从1D贴图上采样的,所以不能和2D贴图混合,但是我发现这个渲染器本身就有一个地方讲baseColor与2D贴图混合,所以应该是可以混合的。
求问各位这中间出了什么问题?应该怎么办来将两个颜色混合?