3-2 纹理单元

前言

纹理: GL_TEXTURE_2D 内部还有16单元 GL_TEXTURE0 ~ GL_TEXTURE16
源代码地址

一 代码

1. 产生材质

1.1 QOpenGLTexture(QImage()) 这种方法产生材质
1.2 设置 textureWall->bind(0) 绑定到材质槽上
1.3 通知shader变量是对应哪个材质 shaderPorgram.setUniformValue(“ourTexture1”,0);

textureWall = new QOpenGLTexture(QImage(":/image/wall.png").mirrored());
textureLe = new QOpenGLTexture(QImage(":/image/le.ico").mirrored());


shaderProgram.bind();
shaderPorgram.setUniformValue("textureWall",0);
shaderPorgram.setUniformValue("textureLe",1);

//glUniform1i(glGetUniformLocation(shaderProgram.ID,"textureWall"),0);
//glUniform1i(glGetUniformLocation(shaderProgram.ID,"textureLe"),1);
textureWall->bind(0);
textureLe->bind(1);

glActiveTexture(GL_TEXTURE0);  
glBindTexture(GL_TEXTURE_2D,textureWall);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D,textureLe);

shaderProgram.bind(); 

glDrawWlements(GL_TRIANGELS,6,GL_UNSINGED_INT,0);

2.解析材质"槽"

在这里插入图片描述

  1. 材质GL_TEXTURE_2D实际上有16个槽
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D,texture1);
    这两句就是为了将材质切换+绑定到特定槽上

2.如果不切换,当前就是0

3.fragment shader 设置使用材质(用哪个槽)

#version 330 core
out vec4 FragColor;

in vec4 ourcolor;
in vec2 texcoord;

uniform sampler2D textureWall;
uniform sampler2D textureLe;

void main()
{
    FragColor = mix( texture2D (textureWall,texcoord),texture2D (textureLe,texcoord),0.5);
}

  1. sample2D是采样器,默认构造参数会把变量都初始化为0
  2. CPU端,可以将textureWall 和 textureLe改值
    shaderPorgram.setUniformValue(“textureWall”,0);
    shaderPorgram.setUniformValue(“textureLe”,1);
    否则:
    sampler2D textureWall; // textureWall=0
    sampler2D textureLe; //textureLe=0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值