美文网首页OpenGL ES
第十八节—关于多纹理单元渲染

第十八节—关于多纹理单元渲染

作者: L_Ares | 来源:发表于2020-10-12 17:38 被阅读0次

本文为L_Ares个人写作,如需转载请表明原文出处。

关于多纹理单元传入FragmentShader进行渲染的话,需要有一个简单的理解。

片元着色器中允许输入最多16个纹理单元,下面举一个最简单的例子来讲述多个纹理单元的混合渲染。

如果想要更多的混合,可以参考OpenGL中说过的第十一节—混合,里面有颜色混合的方程式。

混合是在FragmentShader中完成的,所以下面写一个最简单的多纹理混合的片元着色器代码(服务端代码)。

attribute vec2 textCoord;
uniform sampler2D firstMap;
uniform sampler2D secondMap;

void main ()
{
    vec4 firstColor;
    vec4 secondColor;

    firstColor = texture(firstMap, textCoord);
    secondColor = texture(secondMap, textCoord);

     gl_FragColor = firstColor * secondColor;
}


那么在客户端,也就是我们的普通代码文件中,需要打通通道,传递纹理和纹理坐标。

//获取纹理坐标在fragment中的位置
GLuint textCoord = glGetAttribLocation(self.nProgram, "textCoordinate");
//打开纹理坐标通道
glEnableVertexAttribArray(textCoord);

//因为多个纹理,所以最好激活两个纹理单元
glActiveTexture(GL_TEXTURE0);
//这里的第二个参数,绑定纹理到默认的纹理ID,因为glUniform里面也设置的0
glBindTexture(GL_TEXTURE_2D, 0);
//设置采样器的位置值
 glUniform1i(firstMapLocation,0);

//激活第二个纹理单元
glActiveTexture(GL_TEXTURE1);
//绑定第二个纹理单元
glBindTexture(GL_TEXTURE_2D, 1);
//设置采样器采样位置值
glUniform1i(secondMapLocation,1);

相关文章

  • 第十八节—关于多纹理单元渲染

    本文为L_Ares个人写作,如需转载请表明原文出处。 关于多纹理单元传入FragmentShader进行渲染的话,...

  • 第十二节—关于纹理单元

    本文为L_Ares个人写作,包括图片皆为个人亲自操作,如需转载请表明原文出处。 一、关于纹理采样器Sampler ...

  • 纹理渲染

    直线 起点 终点。对于rgb 每一个像素点都要描述出来 纹理 起点在哪 终点在哪 中间描述如何渐变 纹理渲染 ...

  • 纹理单元

    最近在学习OpenGL,把学习的一些过程写在这里,希望与大家共同分享讨论。欢迎光临我的个人网站Orient一起讨论...

  • CPU优化

    渲染模块 降低DrawDall通过批渲染来达来降低DC。 简化资源模型面数,数量纹理数量纹理尺寸纹理格式选择硬件支...

  • Unity学习—渲染知识基础

    关于Unity 渲染概念的基本知识,和部分技术名词解释 本文原地址:Unity学习—渲染知识基础 名词解释 纹理 ...

  • Unity 渲染教程(十):更多复杂的应用场景

    本篇文章是Unity C#渲染系列教程的第十部分,关于更多复杂的应用场景。上一次我们介绍了如何使用多张纹理来创建一...

  • 使用Dx11渲染纹理4——渲染纹理

    渲染纹理过程 其余过程与渲染三角形一致,如下是多的操作步骤: 编写着色器具体见下[着色器]一节。 创建纹理使用Cr...

  • mipmap纹理在各端显示的阈值

    近期在渲染模型的时候发现,在某个角度下,模型上有没有显示的纹理呈现黑色,经过是mipmap的纹理超出了系统渲染纹理...

  • SceneKit杂谈 - 录制SCNView到视频需要几步?

    核心思路 通过SCNView的回调,取到id 中 metal renderPass的渲染目标纹理,将渲染目标纹理拷...

网友评论

    本文标题:第十八节—关于多纹理单元渲染

    本文链接:https://www.haomeiwen.com/subject/ixkppktx.html