_入非非_ 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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
    • ¥15 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?