Qt OpenGL 学习笔记 – 3

006. GLSL 初步认识

in out

fragment shader和 vertex shader的变量是可以对接的,比如:

在vertex shader里你定义了:

out vec4 color1;

就代表你要输出一个vec4类型的变量,要在fragment shader中接收它你只需要:

in vec4 color1;

但是要注意保持变量类型一致变量名一致

layout (location = n)

#version 450 core

layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
layout (location = 2) in vec2 aTextureCord;
out vec3 myColor;
out vec2 textureCord;

void main() {
   gl_Position = vec4(aPos.x, -aPos.y, aPos.z, 1.0);
   myColor = aColor;
   textureCord = aTextureCord;
}

这里面有个 layout (location = n) 这中间的n其实就是我们的glVertexAttribPointer里面的第一个参数,表示对应的属性编号。你在C++端写得是第几个属性,那么你传进来的值就赋给location所对应的变量。

比如你写个glVertextAttribPointer(0,……); 那么你定义的区域传进来的值都会赋值给aPos这个变量

当然不要忘记应用属性哦:

glEnableVertexAttribArray(int location);

010. Texture的使用

在fragment shader里使用texture,需要一个类似于id的东西。(可以注意到OpenGL里很多id)

// fragment shader
uniform sampler2D texture0;
uniform sampler2D texture1;

然后我们在shaderProgram(QOpenGLShaderProgram)里为他们设置“ID”.

shaderProgram.bind(); // 必须先绑定
shaderProgram.setUniformValue("texture0", 0);
shaderProgram.setUniformValue("texture1", 1);

设置过后我们还需要加载纹理资源

// 类内已声明 QOpenGLTexture *texture0, *texture1;
texture0 = new QOpenGLTexture(QImage(":/texture/Texturelabs_Brick_141S.jpg").mirrored());
texture1 = new QOpenGLTexture(QImage(":/texture/1").mirrored());
// 因为QImage和texture坐标系不一样所以需要mirrored

这样纹理就加载好了

在我们要使用包含这个纹理的shader的时候只需要:

    shaderProgram.bind();
    texture0->bind(0);
    texture1->bind(1);

bind后跟的数字就表示这个纹理对应的id


知识共享许可协议


本文由 CharSaMa's blog 创作,采用

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议(CC BY-NC-SA 4.0)
授权。




  • 允许行为:标注作者及原文出处,衍生内容需沿用相同协议

  • 禁止行为:商业用途(包括广告、付费内容、商品推广等)



© 2025 CharSaMa's blog。协议全文:法律文本

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇