_入非非_ 2019-05-26 18:07
浏览 467

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贴图混合,所以应该是可以混合的。

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

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 聚类分析或者python进行数据分析
    • ¥15 逻辑谓词和消解原理的运用
    • ¥15 三菱伺服电机按启动按钮有使能但不动作
    • ¥15 js,页面2返回页面1时定位进入的设备
    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号