OpenGL日常-着色器

本文介绍了OpenGL中的着色器工作原理,通过数据流阐述GLSL语言如何在顶点着色器和片元着色器间传递数据。讲解了in/out、layout(location=0)、attribute、varying和uniform等关键概念,以及向量在着色器中的应用。
摘要由CSDN通过智能技术生成


大家好,欢迎来到听风的OpenGL日常。

写在前面

本文代码

本篇我们通过OpenGL的数据流动来理解着色器,通过数据流会很清楚的看到OpenGL着色器的工作原理。所以今天要说的内容全部跟GLSL语言有关,当然这样的一篇不可能全部讲完(可能连皮毛都没有),理解着色器是如何传数据的才是我们的重点。

话不多说,一图以蔽之。

res.png-147.7kB

如图中,上部CPU的部分为顶点数据,其中包含顶点、颜色数据(一般情况下);下部分橙色为顶点着色器,绿色为片元着色器;gl_Position内置变量用于顶点位置设置,gl_FlagColor内置变量用于片元颜色设置。

着色器程序示例

顶点着色器

顶点着色器shader.vs

#version 330 core
layout (location=0) in vec3 position;
layout (location=1) in vec3 color;

attribute vec2 tex_coord;

varying vec2 transform_to_frag;
out vec4 vertex_color;

void main()
{
    gl_Position = vec4(position, 1.0);
    vertex_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}

片元着色器

片元着色器shader.frag

#version 330 core
in vec4 vertex_color;

varying vec2 transform_to_frag;
uniform sampler2D color_map;

out vec4 color;

void main()
{
    color = vertex_color;
    gl_FragCol
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值