OpenGL如何正确混合材质颜色?

我在修改一段程序时,在片元着色器中混合两个材质的颜色时报错,由于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贴图混合,所以应该是可以混合的。

求问各位这中间出了什么问题?应该怎么办来将两个颜色混合?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问