这里是GitHub上的项目地址。
声明:这个项目思路和素材完全是基于这个OpenGL教程,作者是Joey de Vries。我做的工作仅是在macOS上用Objective-C实现了一遍,原教程是在windows上基于C++的实现。我的项目中没有依赖原教程中依赖的第三方库,完全是基于系统库的实现。非常感谢Joey de Vries提供的优秀的OpenGL教程!
前言
去年利用空闲时间学习了这个OpenGL的教程,一步步跟随这作者的脚步实现了一个打砖块的小游戏。打砖块这个小游戏虽然简单,但是麻雀虽小,五脏俱全。常见的OpenGL的使用方法基本上都有涉及,比如使用OpenGL渲染文字、制作粒子系统、图像的后处理等等。另外让我感觉有价值的一方面则是在使用OpenGL实现一个较复杂的程序时,怎样管理好OpenGL的资源,如texture,shader,怎样将整个程序较为清晰的组织起来。在这个简单的小游戏中,原作者的思路给了我很多帮助和启发。
我写这一系列博客的主要目的是帮助自己记录一下学习过程,加深自己的理解。如果能给看到这个系列博客的人带来一点点帮助,那就幸甚至哉了!
在macOS上建立OpenGL渲染环境
既然是一个用OpenGL实现的小程序,那么我们首先就要先建立一个OpenGL的渲染环境,能使用OpenGL命令在窗口上画画。macOS上给开发者提供了OpenGL的framework,能让我们很方便的创建OpenGL的context,以及OpenGL的画布。
1. 创建Window以及View
在app启动后我们需要动态的创建一个窗口来显示,以及一个OpenGL的视图来填充窗口,注意这里的app是指macOS下的app,不是iOS。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// 添加窗口关闭消息的监听
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowWillClose) name:NSWindowWillCloseNotification object:nil];
NSRect windowRect = NSMakeRect(WindowX, WindowY, WindowW, WindowH);
NSRect viewRect = NSMakeRect(0, 0, WindowW, WindowH);
// 创建窗口
_mainWindow = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable backing