OpenGL 着色器语言基础

OpenGLES(四)glsl语法 GLSL是OpenGL着色器语言(OpenGL Shading Language) 阅读详情

数据类型概述:

  • 标量 :也被称为“无向量”其值只有大小,并不具有方向。
  • 向量:有方向的量叫做向量。OpenGLES着色语言中,向量可以看做是用同样类型的标量组成,其基本类型也分为bool、int和float三种。 每个 向量可以由2个、3个、4个相同的标量组成。

    1.其基本类型也分为bool、int和float三种。 每个向量可以由2个、3个、4个相同的标量组成 
    2.向量在着色器中的作用可以很方便的存储以及操作颜色、位置、纹理坐标等不仅包含一个组成部分的量。
     开发中,有时可能需要单独访问向量中的某个分量,基本的语法为 “<向量名>.<分量名>”。
    

    这里写图片描述

  • 矩阵:
    1.矩阵在3D开发中的作用:做位移变换
    2.矩阵类型

    3.矩阵初始化
    mat4*4 是什么意思:第一个值表示列,第二个表示行
    初始化矩阵
    mat3 m=mat3(1.0 , 2.0 ,3.0 , 4.0, 5.0, 6.0, 7.0 ,8.0 , 9.0);
    vec3 column1=vec3(1.0 , 2.0 ,3.0 );
    vec3 column2=vec3(4.0, 5.0, 6.0 );
    mat3 m=mat3(column1,column2 ,column3);
    vec2 column1=vec2(1.0 , 2.0 );
    vec2 column3=vec2( 7.0 ,8.0 );
    mat3 m=mat3(column1 ,3.0 ,column2 ,6.0 ,column3 ,9.0);
  • 采样器
    采样器是着色语言中不同于C语言的一种特殊的基本数据类型,其专门用来进行纹理采样的相关操作。一般情况下,一个采样器变量代表一幅或一套纹理贴图
    这里写图片描述
  • 结构体
    OpenGL ES着色语言还提供了类似C语言中的用户自定义结构体,同样也是使用struct关键字进行声明。

    struct info{ //声明一个结构体 info
    vec3 color; //颜色成员
    vec3 position; //位置成员
    vec2 texturecoor; //纹理坐标成员
    }

  • 数组:声明数组的方式主要有两种:

    1.在声明数组的同时,指定数组的大小。
    vec3 position[10];//声明 一个包含10个vec3的数组
    2.引用数组之前,要再次使用第一种声明方式来生命该数组。
    vec3 position[];//声明 一个大小不定的vec3整型数组
    vec3 position[5];//再次声明该数组 并指定大小

代码中访问数组的下标都是编译时常量,这时编译器会自动创建适当大小的数组,使得数组尺寸足够存储编译器看到的最大索引值对应的元素。

  • 代码如下:
  • vec3 position[];//声明了一个大小不定的vec3数组
    position[3] = vec3(3.0); //position需要一个大小为4的数组
    position[20] = vec3(6.0); //position需要一个大小为21的数组

  • 空类型:空类型使用void表示,仅用来声明不返回任何值得函数。例如在顶点着色器以及片元着色器中必须存在的main函数就是一个返回值为空的函数,代码如下:

    void main() {//声明一个空返回值类型的main方法
     }
     
     

  • 类型修饰符
    1.attribute 一般用于每个顶点都各不相同的数据,例如:颜色,顶点。。。

    • 只有顶点着色器中会有这哥们(attribute )
    • 是属性限定符
    • 只能用来修饰 浮点数的标量 ,浮点数的向量 , 浮点数的矩阵变量,不能用于修饰其他类型

    2.uinfrom 一致变量限定符

    (一致变量:对同一组顶点组成的单个3D物体中所有的顶点都相同的量)

    • 主要出现在顶点和片元 着色器
    • 可以修饰所有的基本数据类型

    3.verying 用来传递顶点着色器中的数据到片元着色器中

    例如:
    顶点着色器 verying vec2 texture;
    片元着色器 verying vec2 texture;

    4.const 加了这哥们变量值不可变,常量,编译时常量 (编译时常量:在声明的时候要进行初始化,编译器在编译的时候不需要给他分配任何运行时资源。)
    例如:
    const float PI=3.14;

    5.in 和out 用in修饰的变量代表的是输入变量,用out修饰的表示输出变量
    6.inout 用来修饰参数为输入输出参数,同时具有两种功能!

  • GLSL操作符与优先级

    这里写图片描述

  • 操作符重载
    例如:向量和矩阵之间的乘法 vec3 v;
    mat3 m;
    vec3 r=v*m;注意:矩阵和向量的维度必须匹配!

  • 控制流

if(){
}else{
}
switch(){
    case : brake; 
    default:break;
 }
  • 循环语句
for(int i=0 ;i<10;i++){}
while(){}
do{
}while()
  • 流控制语句
    brake;
    return;
    continue;
    discard:丢弃当前片元,终止片元着色器执行( 只能在片元着色器中使用,只要运行到该语句,那片元着色器就 会立刻终止)
  • 函数声明
    1.函数声明,变量名需要添加访问修饰符
    2.GLSL支持用户自定义函数,同时它定义了一些内置函数
    3.函数名称可以是任何字符、数字、下划线,但是不能使用数字,连续下划线或者gl_作为函数的开始
    4.返回值可以是任何内置的GLSL类型,或者用户定义的结构体和数组类型。
    5.返回值是数组时,必须现实的指定大小。函数返回类型是void则没有返回值
    6.函数的参数也可以是任何类型的函数,包括数组(这里数组必须设置大小)
    7.在使用一个函数前必须声明他的原型或者直接给出函数体。
    8.GLSL的编译器在使用函数前必须找到函数的声明,否则会产生错误
    9.函数原型只是给出了函数的形式,但是并没有给出具体的实现内容

  • 内置变量

    介绍:着色器代码的开发中会用到很多变量,其中大部分可能是由开发人员根据需求自定义的,但着色器中也提供了一些用来满足特性需求的内建变量
    

    特点:

     1.内建变量不需要声明就可以使用。 
     2.一般用来实现 管线渲染固定功能部分 与 自定义顶点 或者 片元着色器 之间的信息交互。
    

    分类(两类):

     1、输入变量: 输入变量负责将渲染管线中固定部分产生 的信息传递进着色器
     2、输出变量: 输出变量负责将着色器产生的信息传递给渲染管线中固定功 能
    
名称类型描述
gl_Colorvec4输入属性-表示顶点的主颜色
gl_SecondaryColorvec4输入属性-表示顶点的辅助颜色
gl_Normalvec3输入属性-表示顶点的法线值
gl_Vertexvec4输入属性-表示物体空间的顶点位置
gl_MultiTexCoordnvec4输入属性-表示顶点的第n个纹理的坐标
gl_FogCoordfloat输入属性-表示顶点的雾坐标
gl_Positionvec4输出属性-变换后的顶点的位置,用于后面的固定的裁剪等操作。所 有的顶点着色器都必须写这个值。
gl_ClipVertexvec4输出坐标,用于用户裁剪平面的裁剪
gl_PointSizefloat点的大小
gl_FrontColorvec4正面的主颜色的varying输出
gl_BackColorvec4背面主颜色的varying输出
gl_FrontSecondaryColorvec4正面的辅助颜色的varying输出
gl_BackSecondaryColorvec4背面的辅助颜色的varying输出
gl_TexCoord[]vec4纹理坐标的数组varying输出
gl_FogFragCoordfloat雾坐标的varying输出
  • 片段着色器的内置变量
名称类型描述
gl_Colorvec4包含主颜色的插值只读输入
gl_SecondaryColorvec4包含主颜色的插值只读输入
gl_TexCoord[]vec4包含纹理坐标数组的插值只读输入
gl_FogFragCoordfloat包含雾坐标的插值只读输入
gl_FogCoordvec4只读输入,窗口的x,y,z和1/w
gl_FrontFacingbool只读输入,如果是窗口正面图元的一部分,则这个值为true
gl_PointCoordvec2点精灵的二维空间坐标范围在(0.0, 0.0)到(1.0, 1.0)之间,仅用于点图元和 点精灵开启的情况下。
gl_FragData[]vec4使用glDrawBuffers输出的数据数组。不能与gl_FragColor结合使用
gl_FragColorvec4输出的颜色用于随后的像素操作
gl_FragDepthfloat输出的深度用于随后的像素操作,如果这个值没有被写,则使用固定功能管线的深度值代替
【OpenGLShader】01.attribute、uniform、varying、in、out 接下来我们要进入OpenGL三部曲的最后一部了,OpenGLShader的语法及案例。 阅读详情

相关推荐

着色器语言 GLSL (opengl-shader-language)入门大全

GLSL 中文手册 基本类型: 类型 说明 void 空类型,即不返回任何值 bool 布尔类型 true,false int 带符号的整数 signed integer float 带符号的浮点数 floating scalar vec2, vec3, vec4 n维浮点数向量 n-component floating point vector bvec2, bvec3, bvec4 n维布尔向量 Boolean vector ivec2, ivec3, ivec4

lzfshub 4325

opengl 学习着色器

我们有3个顶点,和相应的3个颜色,从这个三角形的像素来看它可能包含50000左右的片段,片段着色器为这些像素进行插值颜色。在着色器主题的最后,我们会写一个类来让我们的生活轻松一点,它可以从硬盘读取着色器,然后编译并链接它们,并对它们进行错误检测,这就变得很好用了。顶点着色器应该接收的是一种特殊形式的输入,否则就会效率低下。先设置片段着色器的uniform值,我们在main函数中,渲染之前使用着色器,通过获取着色器的位置,然后设置颜色值。比如说,我们有一个线段,上面的端点是绿色的,下面的端点是蓝色的。

cs821984831的博客 1644

C++.OpenGL (3/64)着色器(Shader)深入

着色器(Shader) 深入 着色器核心概念 1. GLSL语言基础 2. Uniform变是 3. 着色器类封装 4. 属性与Uniform对比 5. 着色器间传递数据 6. 着色器组织技巧 7. 调试技巧 8.高级Uniform类型 常见错误处理

Rachelhi的博客 814

OpenGL-GLSL语言入门教程(2)

目录 数据块接口 in/out块 uniform块 Uniform缓冲对象 Uniform块布局 使用Uniform缓冲 一个简单的例子 buffer块 参考网站:LearnOpenGL 参考书籍:OpenGL编程指南第九版 数据块接口 到目前为止,每当我们希望从顶点着色器向片段着色器发送数据时,我们都声明了几个对应的输入/输出变量。将它们一个一个声明是着色器间发送数据最简...

关注网络安全、云原生安全 1655

OpenGL ES 3.0 (1)

在前面几张中你已经看看到,着色器是OpenGL ES 3.0 API 的一个基础核心概念,每个OpenGL ES 3.0 程序都需要一个顶点着色器和一个片段着色器,以渲染有意义的图片,考虑到着色器是API概念的核心,我们希望确保你在深入了解图形API的更多细节之前,掌握编写着色器的基础知识 本章的目标是确保你理解着色器语言中的如下概念 变量和变量类型 向量和矩阵的构造选择 常量 结构和数组 运算符,控制流和函数 输入/输出变量,统一变量,统一变量块和布局限定符 预处理器和指令 统一变量和插

Yuan 532

C++和OpenGL实现3D游戏编程【连载15】——着色器初步(附源码)

OpenGL着色器(Shader)是用着色器语言(OpenGL Shading Language, GLSL)写的,是一种在图形渲染管线中用于执行特定渲染计算的小程序。当今大多数显卡都有成千上万的小处理核心,我们可以简单的把这些小处理核心在进行图形渲染过程中运行的各阶段统称为一个个管线。着色器是为每一个渲染管线的各个阶段运行的独立的小程序,能在图形渲染管线中快速处理数据。那我们来深入了解一下图形渲染的基本过程和可编程渲染管线的概念。

zhooyu的博客 1107

现代OpenGL学习笔记三:深入理解着色器

上篇笔记学习了现代OpenGL绘制第一个三角形,学习使用VAO,VBO以及EBO绘制三角形,同时学会了使用多个VAO,VBO;多个片段着色器。现在开始深入学习着色器,将其中不懂的地方通过查缺补漏加深理解。 推荐参考原文:https://learnopengl-cn.github.io/ https://learnopengl-cn.github.io/01%20Getting%20starte...

不想不努力的博客 2682

OpenGL基础入门:从Hello World到图形渲染

OpenGL(Open Graphics Library)是一个跨语言、跨平台的应用程序编程接口(API),它是由近50个主要的计算机公司共同开发的。自从1992年首次推出以来,OpenGL已经成为了图形处理领域不可或缺的工具之一。它主要用于图形渲染,也就是通过编程生成图形和图像的过程。图形渲染管线是计算机图形学中一个核心概念,它定义了从数据输入到屏幕像素输出的一系列处理步骤。了解和掌握图形渲染管线对于进行图形编程至关重要。

weixin_30591519的博客 872

0025__OpenGL学习(二) GLSL语言基础

https://www.jianshu.com/p/9267e7b8640f

行潇 206

HOPE:基于强化学习的混合策略路径规划器,适用于多样化停车场景

本文提出了一种混合策略路径规划器(HOPE),用于解决自动停车中的路径规划问题。HOPE结合了强化学习(RL)和Reeds-Shepp(RS)曲线,通过动作掩码机制引导RL智能体的探索,并利用Transformer融合环境感知信息与掩码。该方法在多样且复杂的停车场景中实现了超过97%的成功率,并通过真实实验验证了其泛化能力。此外,本文还提出了基于空间与障碍物分布的停车场景难度分级标准,进一步提升了训练与评估的效率。实验结果表明,HOPE在规划成功率和跨场景泛化能力上均优于传统的基于规则算法和朴素强化学习方法

weixin_42783201的博客 1466

H3C防火墙旁路部署实战:网关迁移到防火墙后,如何配置DHCP和VLAN间隔离策略?

本文详细介绍了H3C防火墙旁路部署实战,重点讲解网关迁移到防火墙后的DHCP配置和VLAN间隔离策略。通过实际案例和配置示例,帮助网络工程师解决传统核心交换机架构的性能瓶颈和安全管控问题,实现精细化访问控制。

weixin_42549451的博客 418

LearnOpenGL笔记->入门->着色器

LearnOpenGL->入门模块中着色器的一些个人笔记

2201_75303014的博客 377

从UART到RS485:手把手教你用SIT3485E收发器搞定工业级通信(含原理图与PCB布局要点)

本文详细解析了从UART到RS485的工业级通信转换,重点介绍了SIT3485E收发器的原理图设计、PCB布局要点及抗干扰技巧。通过差分信号传输和优化电路设计,实现长距离、多设备稳定通信,适用于工业自动化等复杂环境。

weixin_29169505的博客 350

OpenGL Shading language学习总结

这篇文章是根据中对应章节的总结,看了好几本OpenGL ES的入门图书,只有这本让我在入门的时候不那么迷茫,强烈推荐! 着色语言概述: OpenGL ES 着色语言是一种高级的图形编程语言,其源自于广泛使用的C语言,同时具有RenderMan以及其他着色语言的一些优良特性,易于被开发人员掌握。简单来说,OpenGL ES着色语言主要包括一下特性: OpenGL ES 着色语言

lihei12345的专栏 3103

STM32低功耗模式下ADC采样抖动的5个隐藏陷阱及解决方案(实测避坑)

本文深入探讨了STM32低功耗模式下ADC采样抖动的5个常见陷阱及解决方案,包括多通道采样电压跃迁、外设开关信号稳定、低功耗模式与ADC时钟同步、输入阻抗失配以及基准电压稳定性问题。通过实测数据和优化代码示例,帮助工程师有效规避ADC采样数据抖动问题,提升物联网设备的测量精度和稳定性。

weixin_30316097的博客 382

AIDD机器学习深度学习药物发现与设计教程总结

AIDD(AI Drug Discovery & Design):是近年来非常火热的技术应用,且已经介入到新药设计到研发的大部分环节当中,为新药发现与开发带来了极大的助力。倾向于机器对数据库信息的自我学习,可以对数据进行提取和学习,一定程度上避免了化合物设计过程中的试错路径,同时还会带来很多全新的结构,为药物发现打破常规的结构壁垒。覆盖了机器学习和深度学习,能与新药研发相结合并实质性的应用到靶点预测、高通量筛选、药物设计、药物的ADMET性质预测等;且算力方面,由早期应用于药物发现领域的决策树、随机

wutianlin0723的博客 6819

Go上的极简OpenGL开发笔记(五)

今天涉及硬核的 shader编写,具体请参阅: OpenGL 渲染流水线 shader 语法格式 Shader 稍微接触点游戏编程/渲染的估计都知道它的大名

刘阿宾的博客 618

【U-Net 数据集制作】如何制作自己的图像分割数据集?(标注与格式转换),图像分割数据集制作与转换神器

在前面的课程中,我们像搭积木一样手写了 U-Net 的网络架构。很多同学迫不及待地想把自己的图片喂进网络开始“炼丹”。但是,深度学习界有一句名言:“数据决定了模型的上限,而网络结构只是在逼近这个上限。用标注工具标出来的是 JSON 文件,怎么变成 U-Net 需要的黑白掩码(Mask)图?为什么我的 Mask 肉眼看是黑白的,一放进 PyTorch 训练就报?如何快速按 8:2 的比例把几千张图片和标签划分成训练集和验证集?

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 195

Android OpenGLES2.0(七)——着色器语言GLSL

原文链接:Android OpenGLES2.0(七)——着色器语言GLSL在前面的博客中,我们都使用到了片元着色器和顶点着色器,相信我们对着色器语言有了一点了解。前面我们所使用的着色器,代码非常简单,能做的事情非常有限,而在后面的博客中我们将会用到的着色器的越来越复杂,所以在这里单独写一篇博客来介绍我们使用到的着色器语言GLSL。关于着色器着色器是用来实现图像渲染的,用来替代固定渲染管线的可编程...

tuuzhang的博客 505

PMP–一、二、三模–分类–13.干系人管理

A:确认是否已制定沟通管理计划,使业务干系人认识到项目的成功之处。B:让业务干系人参加冲刺回顾会议。C:与发起人和关键干系人一起确定产品待办事项列表中的优先要务,以便交付商业利益。D:为关键干系人开展收尾调研。C。

stqer的博客 1418

SpringBoot中使用FastJson解析Json数据

场景 1.SpringBoot默认配置的是Jackson。 2.项目搭建专栏: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/column/info/35688 实现 引入fastJson的依赖 <!-- fastjson的依赖 --> <dependency> <groupId>com.alibab...

BADAO_LIUMANG_QIZHI的博客 4140

LearnOpenGL——入门(三)着色器

着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。之前了解了如何恰当地使用它们,现在用一种更加广泛的形式详细解释着色器,特别是OpenGL着色器语言(GLSL)。

QQ805009795的博客 632

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Qt OpenGL 参考文章及重要概念[转]

Qt OpenGL FFmpeg参考文章 【learn opengl with Qt】 https://blog.youkuaiyun.com/qq_40946921/category_9969351.html 《Learn OpenGL with Qt——创建窗口》 《Learn OpenGL with Qt——你好,三角形》 《Learn OpenGL with Qt——着色器》 《Learn OpenGL with Qt——纹理》 《qt 使用opengl显示yuv实时视频流》 《Q.

baidu_41388533的博客 367

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

[OpenGL] 着色器语言GLSL

GLSL(Graphics Library Shader Language))是一种类C语言,它是一种为OpenGL设计的编程语言,用于编写图形着色器程序。着色器是运行在图形处理器(GPU)上的小型程序,它们允许开发者对图形管线的各个阶段进行编程控制,以实现复杂的视觉效果和实时渲染功能。这里主要借鉴的openGL中文手册,唯一不同的是,测试示例和代码改成了Qt+OpenGL,而并非采用原生的C++版本的测试调用参考此处GLSL原生C++版本GLSL使用请点击此处。

qq_45280097的博客 1565

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OpenGL的着色器内存访问

着色器内存访问 Shader Memory Access

1536

【OpenGL】shader 着色器

OpenGL着色器编程入门摘要:本文介绍了OpenGL可编程管线中的着色器基础。现代OpenGL需要两个基本着色器:顶点着色器(处理每个顶点)和片段着色器(处理每个采样点)。着色器使用GLSL语言编写,运行时动态编译。文章详细展示了如何从文件加载着色器代码(.vert和.frag文件)、编译着色器、创建着色器程序并链接的过程。顶点着色器示例演示了GLSL 3.3核心语法,通过layout声明输入顶点位置属性。编译完成后可删除中间着色器对象以释放资源。这些操作为后续图形渲染管线奠定了基础。

Antonio915的博客 1522
上一篇: Android 模块化 组件化 插件化的关系
下一篇: 设计模式
jhonjson
博客等级 码龄11年 220粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值