GAMES101学习-第8课进行shader的初步了解

目录

理解GLSL代码

uniform变量

OpenGL&Direct API的运作

什么是API

什么是OpenGL

什么是DirectX

shadertoy网站


理解GLSL代码

下面是对老师课上举的一个GLSL(OpenGL-shader-language)的shader例子做一个简单的注释,便于理解:

uniform变量

GLSL shader中的全局变量,类似于C++里的static/extern(这里先不考虑static和extern的不同),可以在任意shader(vertex/geometry/fragment shader)中访问,一旦初始化就不能随意修改,不然会引起编译错误。

关于uniform的定义和使用后续再进行探讨,这里主要是为了理解老师代码里uniform的含义。

//GLSL是一个简单的像素着色器的小程序,告诉一个像素的颜色是什么
//uniform变量是GLSL shader中的全局变量,可以随意在任意shader

uniform sample2D myTexture;//纹理全局变量
uniform vec3 lightDir;//光照方向,认为每个像素有个固定的光照方向
varying vec2 uv;
varying vec3 norm;//插值出来每个像素的法线是norm,插值这个步骤OpenGL来做

void diffuseShader() 
//对每一个像素都执行一次,因此不需要循环
{
	vec3 kd;
	kd = texture2d(myTexture, uv);//漫反射系数(与纹理相关)
	//dot表示向量点乘;clamp函数限制了值在[0,1]
	kd *= clamp(dot(-lightDir, norm), 0.0, 1.0);//最最简单的Phong模型的漫反射步骤,这里的光的方向是朝向shading point的,是负数,跟games101学到的“light朝着光源”不一样
	gl_FragColor = vec4(kd, 1.0);//表示该像素的颜色是什么
}

课程的末尾部分,老师还提到去了解一下OpenGL和Direct的运作:

OpenGL&Direct API的运作

什么是API

该部分参考:什么叫做API?看完你就理解了

全称Application Progarmming Interface,即应用程序编程接口。程序员在开发应用程序时,通过API来编写程序就可以避免编写一些无用程序。API大多数由后端编写,前端开发人员进行直接调用。用户提出某项请求,开端开发人员将请求传递传递给后端,后端再根据请求地址返回结果。

比如在用C语言编程时,我们(程序员)可以直接调用sort()函数实现排序,十分简单。这段过程其实很复杂,要先扫描硬盘查找文件->读取文件数据->将数据放入内存->翻译数据->显示在屏幕上,这些复杂的操作都被放在了函数sort(),附带在了操作系统里,程序员只需调用函数即可。

这些封装好的函数就叫做API

我们用的各种编程语言自带的标准库就是API(文件后缀为.lib的一些文件),这些库由开发者们编写,完善,便于我们使用。

C语言API以函数形式呈现:例如printf();

Java API主要以类形式呈现:String;

C++是C的扩展,C++ API既包含函数也包含类;

games101作业1用到的OpenCV(开源图像库)是第三方库。

什么是OpenGL

OpenGL是一个关于图形的API的详述定义,并没有提供几何实体图形直接用以描述场景,只是规定了很多函数和其参数的返回类型,以及要实现的行为和管线的操作过程。OpenGL本身并非API,是一个规范,需要用驱动(硬件厂商生产的)来实现OpenGL这一规范。

OpenGL的库函数采用大量的函数来进行图形的处理和显示。

什么是DirectX

该部分参考:微软DirectX和OpenGL的区别(比较详细)

DirectX是一种API,即程序应用接口。DirectX不只是一个单纯的图形API,它由很多的API组成(显示部分、声音部分、输入部分、网络部分,在3D图形方面的表现最为优秀),能让windows游戏得到更高的执行效率,加强声音和3D图形效果,为游戏开发者们提供一个共同的硬件驱动标准,让游戏开发者不必为每一个品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。简单来说:只要某一种游戏是依据DirectX来开发的,不管用的什么样的显卡、声卡设备,用户都能体验到最佳的效果(驱动要支持DirectX)。

shadertoy网站

 Shadertoy BETA网址: Shadertoy BETA

根据自己想要的材质,搜索就可以得到

例如我想找大理石材质,输入marble

具体这个网站还没有仔细去看,之后到了真正开始写shader的时候探索一下这个网站再来更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九九345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值