游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4031|回复: 2

一套学习OpenGL的框架,及翻写Nehe的OpenGL教程

[复制链接]

1

主题

1

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2014-4-1 11:34:52 | 显示全部楼层 |阅读模式
WhyGL:一套学习OpenGL的框架,及翻写Nehe的OpenGL教程
      最近在重学OpenGL,之所以说重学是因为上次接触OpenGL还是在学校里,工作之后就一直在搞D3D,一转眼已经毕业6年了.OpenGL这门手艺早就完全荒废了,现在只能是重学.学习程序最有效的办法是动手写,光看书是不行了,因为看书的时候很容易陷入对人类两大难题的思考中,以至于进展缓慢.这两大难题是:这特妈是啥?那特妈又是啥?在重学的过程中,我翻写了Nehe所有的OpenGL教程DEMO.一开始我是把"翻写"写成"重构"的,但想想"重构"这个词这么高端大气上档次,通常只有牛B的人和装B的人爱提,我要是用"重构",感觉后者的嫌疑更大.
      先贴出我的OpenGL作品:
软件说明:
"WhyGL演示程序平台.exe"和"WhyGL.exe"都可以运行程序,不同之处在于,一个是基本的Windows窗体程序,一个是MFC的单文档界面程序.
主UI界面上,鼠标点击可以选择要运行的DEMO
键盘的上下键也可以选择DEMO,PageUp和PageDown用于翻页,回车键用于启动选中的DEMO
F11键用于全屏切换,
ESC用于退出当前DEMO及退出全屏
每个DEMO都会将提示文字信息显示在界面上,H键可以隐藏文字.


      所有的DEMO都写在同一个程序中,采用面向对象的方法,每一个DEMO都对应一个对象.Nehe的DEMO中基本上是采用全局变量,全局函数来实现,而我翻写的程序尽量将其封装为对象的成员变量和成员函数.之所以称这套系统为一个框架,是因为我提供了一套学习OpenGL的平台,可以帮助3D程序的初学者更容易入门,用户可以方便的在上面添加自己的程序.
      3D程序一开始接触会觉得很难,不过究其根本可以分为以下几个过程:
(1)初始化渲染设备;
(2)创建渲染数据,设置渲染状态;
(3)执行数据的处理操作;
(4)响应消息事件;
(5)渲染处理;
(6)删除渲染数据,恢复渲染状态;
(7)销毁渲染设备.
      在WhyGL框架中,我尽量将一些系列通用的复杂的流程封装好,以便于用户写代码时,只关心具体的渲染逻辑.这有些类似GLUT,在GLUT中将windows窗体的创建,事件处理都封装好,用户只填写回调函数即可实现.在WhyGL,为用户提供一个DEMO基类,用户需要继承该类,并添加自己的成员变量,重载其方法就可以绘制自己的图形.这就如同考试时将问答题改成填空题,降低了难度.
先提供个具体的DEMO类如何写:
FlyingHelper.h
View Code
FlyingHelper.cpp
View Code
代码中"// ......."的部分是由用户改写的.

源码中有4个模块,
"SampleWin"和"WhyDemoViewer"为Windows应用程序.
"WhyGLDevice"为OpenGL的设备创建模块,里面还实现了字体的显示功能和简单二维图形显示的功能.
"WhyTestGL"为具体的DEMO逻辑,用户可以在这里添加自己的代码.
程序中还需要一个模块WhyCore这是我引擎的核心,用于对其他模块的加载管理,不过我尚没有将其开源的打算.

接下来要说下程序需要的两个配置文件
WhyCore.ini是引擎的启动文件
[url=][/url]
ModulesPath = .\dll\DumpProcess = trueCreateDumpFile = trueWriteDumpLog = trueMaxNumStackFrame = 10Game = CWhyTestGL[WhyTestGL];DemoGL = CFlying01[url=][/url]

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

WhyTestGL.ini是DEMO的配置文件
[url=][/url]
[WhyTestGL]Nehe = OpenGL-Nehe OpenGL tutorials most of the source data sets to help you from entry to proficient in OpenGLFlying = WhyEngine Demo[Nehe]CNeheLesson01 = Press any key to change background colorCNeheLesson02 = My First Polygon, Draw Triangle and Quad.........CNeheLesson47 = CG Vertex ShaderCNeheLesson48 = ArcBall Rotation[Flying]CFlyingHelper = Flying Helper: Tell you how to create a demoCFlying01 = Test YicGLPrimitive2DRender and draw some 2D graph[url=][/url]

这里的]表示DEMO分为几组.
然后每个字段下是DEMO对象的类名以及对应的相关信息.
用户如果写了自己的DEMO,请务必在WhyTestGL.INI配置文件中添加上相关信息.


1

主题

11

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2014-5-5 11:13:31 | 显示全部楼层
这么好的东西,怎么没人顶呢?谢谢楼主!

0

主题

2

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2014-6-26 11:53:10 | 显示全部楼层
谢谢 这么好的东西,怎么没人顶呢?谢谢楼主!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-26 02:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表