简介
本文的原版为《OpenGL Super Bible 7th》,是同事给我的,翻译是原文+译文的形势。文章不属于机器直译,原因在于语言不存在一一对应的关系,我将尽可能的按照中国人看起来舒服的方式来翻译这些段子,如果段子让你感到身心愉悦,那还劳烦点个关注,追个更。如果我没有及时更新这些东西,那一定是我没好好干活导致的,欢迎同学们监督。
另外,我在东汉书院中为同学们准备了大量的游戏开发图形学方面的资料,欢迎下载东汉书院App,跟着我们,每天进步一点点,帮助同学们实现从理论到代码落地的最后一步。关于东汉书院App的问题以及大家觉得可以改进的地方,尽管提!
东汉书院,等你来玩哦~
咱第一个OpenGL程序
你将会学到啥
- 如何创建和编译shader代码
- 如何使用OpenGL画画
- 如何使用本书的程序框架
在本小节,我们将介绍一个简单的应用程序框架。这里介绍如何创建一个主窗口和渲染简单的图像到那上面去。你也将看到简单的shader长的什么样子的,如何编译他们,以及如何使用他们渲染简单的点, 本章节最后将绘制一个最简单的OpenGL的三角形
创建一个简单的程序
为了介绍我们要使用的框架,我们将以一个极端简单的例子为开始,当然,你在写一个很牛逼的OpenGL程序的时候,你不用使用我们的框架—实际上,我们也不推荐你们使用我们的框架,因为它太简单了。不过,它还是让整个创建OpenGL环境的过程得到简化,并让你能更快速的接触到OpenGL的代码。
你只需要包含sb7.h就可以把整个框架引入到你的代码中。这个头文件中有一个叫做sb7的命名空间,里面包含了我们的应用程序类的申明,sb7::application可以驱动我们样本代码。这个框架也包含了一些工具函数和简单的数学库,因为OpenGL的操作会调用这些东西啦。我们只需要包含sb7.h并且从sb7::application派生出一个类就可以创建一个程序了,然后随便挑一个源代码文件,然后包含一个DECLARE_MAIN的宏的实例就好了。这玩意定义了应用程序的入口,这个入口创建了我们的类的实例并调用了run方法,在这份run方法中,有我们应用程序主循环的实现。并且这个家伙调用了某种初始化的方法,并第一时间调用startup方法,然后在主循环中调用render这个函数。在缺省的实现中,这俩方法都是一个虚函数,并且函数体什么都不干。在我们的程序中,我们重写render函数,然后写上咱的绘图代码。应用程序框架会处理创建窗口以及输入事件, 并且将渲染结果显示给用户看。第一个例子的完整代码如listing2.1所示,并且运行程序的结果截图如图2.1所示:
// Include the "sb7.h" header file
#include "sb7.h"
// Derive my_application from sb7::application
class my_application : public sb7::application
{
public:
// Our rendering function
void render(double currentTime)
{
// Simply clear the window with red
static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
glClearBu