翻写Nehe的OpenGL教程

      最近在重学OpenGL,之因此说重学是由于上次接触OpenGL仍是在学校里,工做以后就一直在搞D3D,一转眼已经毕业6年了.OpenGL这门手艺早就彻底荒废了,如今只能是重学.学习程序最有效的办法是动手写,光看书是不行了,由于看书的时候很容易陷入对人类两大难题的思考中,以致于进展缓慢.这两大难题是:这特妈是啥?那特妈又是啥?在重学的过程当中,我翻写了Nehe全部的OpenGL教程DEMO.原本打算把"翻写"写成"重构"的,但想一想"重构"这个词这么高端大气上档次,一般只有牛B的人和装B的人爱提,我要是用"重构",感受后者的嫌疑更大.windows

      先贴出个人OpenGL做品:框架

软件说明:函数

"WhyGL演示程序平台.exe"和"WhyGL.exe"均可以运行程序,不一样之处在于,一个是基本的Windows窗体程序,一个是MFC的单文档界面程序.学习

主UI界面上,鼠标点击能够选择要运行的DEMO
键盘的上下键也能够选择DEMO,PageUp和PageDown用于翻页,回车键用于启动选中的DEMO字体

F11键用于全屏切换,
ESC用于退出当前DEMO及退出全屏
每一个DEMO都会将提示文字信息显示在界面上,H键能够隐藏文字.spa

 

软件下载地址:
http://files.cnblogs.com/WhyEngine/WhyGL.7z调试


      全部的DEMO都写在同一个程序中,采用面向对象的方法,每个DEMO都对应一个对象.Nehe的DEMO中基本上是采用全局变量,全局函数来实现,而我翻写的程序尽可能将其封装为对象的成员变量和成员函数.之因此称这套系统为一个框架,是由于我提供了一套学习OpenGL的平台,能够帮助3D程序的初学者更容易入门,用户能够方便的在上面添加本身的程序.code

      3D程序一开始接触会以为很难,不过究其根本能够分为如下几个过程:对象

(1)初始化渲染设备;
(2)建立渲染数据,设置渲染状态;
(3)执行数据的处理操做;
(4)响应消息事件;
(5)渲染处理;
(6)删除渲染数据,恢复渲染状态;
(7)销毁渲染设备.blog

      在WhyGL框架中,我尽可能将一些系列通用的复杂的流程封装好,以便于用户写代码时,只关心具体的渲染逻辑.这有些相似GLUT,在GLUT中将windows窗体的建立,事件处理都封装好,用户只填写回调函数便可实现.在WhyGL,为用户提供一个DEMO基类,用户须要继承该类,并添加本身的成员变量,重载其方法就能够绘制本身的图形.这就如同考试时将问答题改为填空题,下降了难度.

先提供个具体的DEMO类如何写:

FlyingHelper.h

 View Code

FlyingHelper.cpp

 View Code

代码中"// ......."的部分是由用户改写的.

 

源码下载地址:
http://pan.baidu.com/s/1bniWD0z

源码中有4个模块,

"SampleWin"和"WhyDemoViewer"为Windows应用程序.

"WhyGLDevice"为OpenGL的设备建立模块,里面还实现了字体的显示功能和简单二维图形显示的功能.

"WhyTestGL"为具体的DEMO逻辑,用户能够在这里添加本身的代码.

程序中还须要一个模块WhyCore这是我引擎的核心,用于对其余模块的加载管理,不过我尚没有将其开源的打算.

 

接下来要说下程序须要的两个配置文件

WhyCore.ini是引擎的启动文件

复制代码

ModulesPath = .\dll\

DumpProcess = trueCreateDumpFile = trueWriteDumpLog = trueMaxNumStackFrame = 10Game = CWhyTestGL

[WhyTestGL]
;DemoGL = CFlying01

复制代码

[WhyTestGL] DemoGL = CFlying01 这个表示初始时将启动哪个DEMO,CFlying01为一个DEMO对象的类名.用该方法在调试程序时比较方便.
前面加分号;表示该行无效.

WhyTestGL.ini是DEMO的配置文件

复制代码

[WhyTestGL]
Nehe = OpenGL-Nehe OpenGL tutorials most of the source data sets to help you from entry to proficient in OpenGL
Flying = WhyEngine Demo

[Nehe]
CNeheLesson01 = Press any key to change background color
CNeheLesson02 = My First Polygon, Draw Triangle and Quad
.........
CNeheLesson47 = CG Vertex Shader
CNeheLesson48 = ArcBall Rotation

[Flying]
CFlyingHelper = Flying Helper: Tell you how to create a demo
CFlying01 = Test YicGLPrimitive2DRender and draw some 2D graph

复制代码

这里的]表示DEMO分为几组.

而后每一个字段下是DEMO对象的类名以及对应的相关信息.

用户若是写了本身的DEMO,请务必在WhyTestGL.INI配置文件中添加上相关信息.

相关文章
相关标签/搜索