OpenGL(三)——OpenGL着色器基础
上一篇我们介绍了OpenGL基础相关的知识:OpenGL图形绘制和OpenGL入门,今天介绍一下OpenGL另一重要的成员----OpenGL着色器。
什么是OpenGL着色器?
Open GL ES 着色器语言是一种高级的图形编辑语言,主要特性有一下几点:
- OpenGL ES着色器语言是一种高级的过程语言
- 对顶点着色器,片元着色器使用的是同样的语言,不做区分
- 基于C/C++的语法及流程控制
- 完美支持向量与矩阵的各种操作
- 拥有大量的内置函数来提供丰富的功能
OpenGL关键技术点
着色器是使用一种叫GLSL的类C语言写成的
着色器的结构:
- 版本声明:#version version_number
- 变量:in type xxx; out type xxx; uniform type xxx;
- main函数
顶点差色器的输入为顶点属性(Vertex Attribute):
- 一般情况的上线为16个包含4分量的顶点属性
- 与硬件有关,通过GL_MAX_VERTEX_ATTRIBS查询:glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
着色器语言除C的基本数据类型外,还包含向量(Vector)和矩阵(Matrix)
- Vector相关的api:
- 访问4个属性:vec.x, vec.y, vec.z, vec.w
- 重组:vec2, vec3, vec4
- Vector相关的api:
GLSL输入与输出:
- 两个着色器之间,输入和输出的类型和名称一样,就会自动匹配 —- 与顺序无关
- 顶点着色器的输入:通过layout来指定输入变量
- 片段着色器的输出:vec4颜色输出变量,指定片段最终的颜色
GLSL的uniform:
- 作用:CPU直接向GPU的着色器发送数据的方式
- uniform是全局唯一
- 着色器里的定义:uniform type xxx;
- opengl代码设置uniform的值:
- 获取地址:glGetUniformLocation(shaderProgram, “uniform名称”)
- 使用着色器程序后,设置值:
- glUseProgram(shaderProgram);
- glUniform4f(location, 0.0f, greenValue, 0.0f, 1.0f);
改变三角形颜色的方法:
- 通过uniform传值给片段着色器
- 顶点数据里,添加颜色数据,再通过顶点着色器传给片段着色器
注意:片段着色器每次处理一个顶点,而不是一个图形
好了,至此,有关OpenGL着色器的基本概念和常用方法基本介绍完毕,在下一篇,我会详细的介绍OpenGL着色器更加高深的知识。如果你对作色器还是不够了解,可以参考我下面的地址,官网有很详细的介绍。
参考
在线学习OpenGL资料一
OpenGL在线学习api文档
创作不易,如果觉得我的博客对你有帮助,不防给我一颗小红心吧。
OpenGL(三)——OpenGL着色器基础相关推荐
- 【OPENGL】第三篇 着色器基础(一)
在这一章,我们会学习什么是着色器(Shader),什么是着色器语言(OpenGL Shading Language-GLSL),以及着色器怎么和OpenGL程序交互. 首先我们先来看看什么叫着色器. ...
- OpenGL着色器基础
前言: 本文翻译自LearnOpengl经典教程,OpenGL着色器基础介绍的比较通俗易懂,特总结分享一下! 为什么要使用着色器? 我们知道,OpenGL一般使用经典的固定渲染管线来渲染对象,但是随着 ...
- 《OpenGL编程指南》一第2章 着色器基础
本节书摘来自华章出版社<OpenGL编程指南>一书中的第2章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第2章 着色 ...
- OpenGL在frag着色器中模拟手电筒效果
在[OpenGL在frag着色器中模拟点光源]的基础上进行修改,得到手电筒效果(https://blog.csdn.net/qq_37340753/article/details/105029079) ...
- 第二十二章 opengl之高级OpenGL(几何着色器)
OpenGL 使用几何着色器 用点造物体 爆破物体 法向量可视化 在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader), 几何着色器的输入是一个图元(如点或三角形)的一组顶点 ...
- OpenGL ES像素着色器
OpenGL ES像素着色器 原文 http://www.tairan.com/archives/7509 目 录 准备开始 像素着色器 vs 顶点/片段着色器 像素着色器101:渐变 像素着色器 ...
- OpenGL ES像素着色器教程
OpenGL ES像素着色器教程 时间 2014-08-27 09:54:51 泰然 原文 http://www.tairan.com/archives/7509 主题 OpenGL ES ...
- OpenGL使用计算着色器进行布料模拟
OpenGL使用计算着色器进行布料模拟 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <stdio.h> #include &quo ...
- OpenGL使用计算着色器进行GPU光线跟踪
OpenGL使用计算着色器进行GPU光线跟踪 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <stdio.h> #include & ...
- OpenGL ES _ 着色器_片断着色器详解
OpenGL ES _ 入门_01 OpenGL ES _ 入门_02 OpenGL ES _ 入门_03 OpenGL ES _ 入门_04 OpenGL ES _ 入门_05 OpenGL ES ...
最新文章
- ie9下console不兼容的问题
- 好用的Span(富文本)api
- CAS SSO实践中,目前解决的问题和有待解决的问题
- 几何基础之点在多边形内的判断
- Scene Flow场景流halcon算子,持续更新
- 多线程并发如何高效实现生产者/消费者?
- 简易中控紫猫插件版(3)压缩包使用说明
- 语言统计学中的几个定律,可作为设计检索的参考
- 关于微信内置浏览器,打开图片上传功能,调用的问题
- 【python】去除字符串头尾的多余符号
- silverlight 学习笔记 (八):Prism中MEF的初步认识
- freeswitch 基于webrtc网页视频、语音通话官方例子video_demo安装
- WebShell -- 开启3389服务
- 基于自抗扰控制的压力环控制算法研究
- 放大电路、单管共发射极放大电路结构、工作原理、lceda仿真
- 如何应对美国对开源项目的出口管制?这是Linux基金会的建议
- 一层神经网络实现鸢尾花数据集分类
- 一枚普通前端平淡无奇的一年 - 2021年终总结
- 激光电视和投影仪有什么区别
- python解析MNIST数据集(IDX格式)