• 问题反馈可发送邮件到stubbornhuang@qq.com

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

Modern OpenGL – GLSL着色语言2:GLSL入口函数和GLSL中的变量

OpenGL可编程渲染管线 发布于2020-11-16 阅读 5,506次 0次评论 0次点赞 本文共1284个字,阅读需要4分钟。

1 GLSL的入口函数和基本结构

对于很多编程语言学习的第一步就是学习如何输出HelloWorld,学过类C语言的同学都知道,C和C++程序的入口函数就是从main函数开始,那么和C语言类似,GLSL语言的入口函数也是从main开始的,每一个OpenGL的shader都有着类似于下列代码的基本结构:

#version 330 core

void main()
{
   // 在此处添加有关的shader程序代码
}

2 GLSL中的变量声明

  • 与C/C++类似,GLSL是一种强类型的编程语言,所有变量在使用之前都必须提前声明,并且需要在声明时就指定变量的数据类型。
    例如:
double redValue = 1.0f;
  • 其次,变量的命名规范与C语言相同:可以使用字母、数字、下划线字符组成变量的名称,但是数字和下划线不能作为名称的第一个字符。
  • 另外与C语言不同的是:变量名称在命名时不能使用连续的下划线,因为,在GLSL中使用连续下划线字符的有可能是保留字符。

3 GLSL中变量的作用域

  • 在任何函数定义之外声明的变量拥有全局作用域,因此对着色器中所有函数都是可见的。类似于C语言中的全局变量。
#version 330 core

double redColor = 1.0f;

void main()
{

}

上述代码中的redColor对于该shader中所有函数都是可见。

  • 在一组大括号之内,比如函数定义、循环体或者if语句块中声明的变量,只是对于该大括号内是可见的。类似于C语言中的局部变量。
  • for循环的迭代自变量,
    下面循环中的i,
#version 330 core


void main()
{
   for(int i=0;i<100;++i)
   {

   }
}

上述的迭代变量i只在for循环体中有效,类似于C/C++。

4 GLSL中变量的初始化

int pointNum = 300;
float length = 150.89f;
bool isVisible = true;
double a = 3.1456465456456456465465LF;
  • 所有声明的变量都必须在声明的同时进行初始化,防止出现错误
  • 浮点数的初始化必须包含一个小数点或者使用科学计数法进行表示,例如7E-8
  • flaot型的变量建议在初始化的时候在数值末尾添加f或者F后缀表示其为浮点数
  • double精度的变量初始化时必须在数值末尾添加lF或者LF后缀表示其为一个双精度的变量

5 GLSL中变量的隐式转换

因为GLSL是一种强类型语言,其有着比C/C++语言更加严格的隐式转换规则。
比如说在C/C++中,bool型变量可以被隐式转换为int型变量,比如:

int isPass = false;

这在C/C++中是没有语法错误的,但是在GLSL中会返回一个编译错误,错误原因为:布尔值不能赋予整形变量。

由此可见GLSL比C/C++更加注重类型安全,在GLSL可支持隐式转换的类型如下:

可转换的类型 可从这些类型进行转换
uint int
float int、uint
double int、uint、float

好的,本节对GLSL中入口函数和变量的声明使用以及初始化做了一些简单的介绍,下一节的内容将对GLSL的基本数据类型以及聚合数据类型等进行介绍。

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:Modern OpenGL – GLSL着色语言2:GLSL入口函数和GLSL中的变量

原文链接:https://www.stubbornhuang.com/973/

发布于:2020年11月16日 22:07:49

修改于:2023年06月26日 22:06:33

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
Google Adsense - 从Google Adsense开通到第一个10美元我用了一年时间
Google Adsense
下一篇
用MFC写一个简易的恶作剧QQ好友的聊天轰炸机
Windows编程
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号