你现在正在看的是一篇使用教程。这里没有一系列的步骤,你需要做的是达到一些简单的效果。你将看到一个简单直接的工程,且有大量的注解。

所以如果你想深入了解OpenGL的着色器,并且你有一些很棒的点子,像是路径追踪,屏幕空间环境光遮蔽或者其他的什么——你将可以在这篇教程中获得你需要的所有的源码和一些基础知识。

如果这样的实例项目很多年前就有,它一定可以帮我省下很多很多的时间。我本来是给大学编写这份教程,但我想更多像你一样的读者可能会喜欢它。

先导知识

如果你是刚开始接触OpenGL或者刚开始接触编程,那么这个教程并不适合你!你需要的是对OpenGL和渲染管道的基本了解。同时,你还需要懂得初始化缓存,分配内存,以及大体上处理甚至自己写C程序。

如果你已经用OpenGL搭建过一些小的场景并且想用一些很棒的着色器来使你制作的游戏更上一层楼——这个教程非常适合你!

以下是你将学到的

你可以在这五种模式中自由切换,每种模式都有简短的介绍。

1、简单的区域着色。片段着色器是用来给你绘制的物体进行单一着色的。这是最简单的一种着色器。(图中区域是纯色的)

2、以坐标形式呈现颜色。片段着色器可以把以插值坐标形式输入的信息当做RGB色彩(一种色彩模式)的值,并用其对应的色彩为你的物体上色。(按照三元组格式输入的数值被片段着色器以0~1之间的RGB色彩值的形式呈现。它基本上以坐标的三元组格式来显示颜色。)

3、纹理。一个纹理被载入并且绘制在物体上。(一张图片被作为纹理载入,并绘制在目标区域。)

4、帧缓存纹理。场景被渲染成与一个纹理对象相关联的帧缓存对象。然后纹理会被绘制到物体上。(有图像纹理的场景被渲染成一个新的帧缓存对象。这个帧缓存对象是与纹理对象相关联的。所以我们做的事情基本上就是渲染纹理,再将纹理渲染到当前场景的目标区域。)

5、深度缓存纹理。场景被渲染成一个与深度缓存纹理相关联的帧缓存对象。纹理数据会被线性化,然后绘制到物体上。并显示出与场景深度相对应的灰度值。(有图像纹理的场景被渲染成一个新的帧缓存对象。在这种情况下,图像并不是被渲染成一个颜色纹理,而是一个摄像机视角的深度纹理。然后深度纹理的值被标准化(在片段着色器中完成),并被当作色彩值使用。这样我们便可以通过灰度值看到场景中的物体离我们有多远。)

安装&&运行

我只在基于debian的unix OS(Ubuntu,Mint…)中测试并运行过这个仿真程序。它应该能在任何其他机器上正常运行,虽然我没有测试过。

配置要求

运行这个仿真程序需要以下的系统配置:

  • 一张支持OpenGL3.3的显卡(以便使用着色器)
  • Unix库:xorg-dev,freeglut3-dev和mesa-common-dev

运行

编译和运行非常简单直接。

  • ./compile.sh
  • ./shaderDemo

当仿真程序运行时,你可以到处移动(但要一直注意屏幕中央!)你的鼠标(点击左键和移动)。

按下‘s’可以切换不同的模式。

随时按下‘h’可以为你提供帮助并显示所有可能的鼠标和键盘的功能。

祝你好运!

源码下载地址:https://github.com/MauriceGit/Simple_GLSL_Shader_Example

你可能感兴趣的内容
OpenGL ES _ 着色器_程序 收藏,2379 浏览
0条评论

dexcoder

这家伙太懒了 <( ̄ ﹌  ̄)>
Owner