设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

开始在OS X开发OpenGL应用

2014-6-16 12:19| 发布者: joejoe0332| 查看: 4905| 评论: 0|原作者: 海王, LeoXu, 何传友, 地狱星星|来自: oschina

摘要: 有一段时间了,我一直想着进入某些视频游戏开发领域. 对于OpenGL我也很感兴趣,并且因此我也想到了为什么不深入去研究研究OpenGL,再去做一款视频游戏呢?我已经有了许多我想要去探索的游戏的点子,但第一都是得要婴 ...

有一段时间了,我一直想着进入某些视频游戏开发领域. 对于OpenGL我也很感兴趣,并且因此我也想到了为什么不深入去研究研究OpenGL,再去做一款视频游戏呢?我已经有了许多我想要去探索的游戏的点子,但第一都是得要婴儿学步的不是吗?


我的原始计划是要去构建:

  1. 一个类似AI的 Pong 游戏克隆

  2. 一个 几何战争 游戏的克隆

  3. 开始着手实现属于我自己的疯狂想法


然而,我最近在浏览HackerNew时偶然发现了 (游戏机制探索器)Game Mechanic Explorer. 它是一个有John Watson 创建的真正很酷的站点,那里面他使用 Phaser 游戏框架创建了一大堆不同的游戏机制. 他给它们中的每一个都分配了一个单独的页面,带上了可以试玩的示例,还有代码和介绍. 这是一个令人着迷的网站,我强烈呼吁大家花几分钟时间来看看它.


看到该网站后,我决定更换我的原来的计划#1但是使用OpelGL重新创建我的作品.我认为这比创造Pong clone更有雄心,但是我仍能实现.

我已经发现一些资源来帮助我开始OpenGL的开发.我将在这里一一列举以供参考,但是详细解说不在此文章的范围之内.


然而.关于The OpenGL SuperBible我要说一件事(我买的是这本书)和我同一个书圈的人都有相同的.抱怨.本书中作者抽象了太多代码称为书中的库.这对于新手来说理解和追查OpenGL有些困难.如果你跟着书中的代码,将会容易理解.如果你不理解库在做什么,你将会迷失在库中和书中.


在文章的其余部分,我将探讨如何才能设置 Mac OS X开始使用OpenGL进行开发 ,同时展示一个简单的三角形.


在开始之前,你能在gist发现这篇博客的全部代码.如果你想看到我们目前的整个项目,你可以在Github上找到它.


所以在开始在OS X使用OpenGL开发,如果你还没有,我建议去获得Homebrew.我们需要做的第一件事就是获得两个个libraries.这都不是必须的,有一些是可以替代的,当然我们必须有其中的一种.


现在让我们一起熟悉我们将使用的Makefile:


如果你熟悉Makefiles.这应该是非常标准的.有一点需要注意的是第19行:the linker flags.OS X 自带的 OpenGL.所以我们应该特别的去指定它.当然我们也应该链接上刚刚安装的两个libraries.当我们添加更多的文件时,我们应该加到OBJS列表中.


让我们做一个简单的程序在屏幕上显示一个三角形:



我会分别说明这些代码的用途,全部的源代码在here.


在 GLFW中有许多的回调.我们只需要两个用于这项工作.第一个是打印输出任何错误信息,二是声明当按下ESC键时,项目停止.以下函数定义了怎么做,当我们准备我们的项目时,我们注册它.


01// The error callback will just print any errors that GLFW hits.
02void error_callback(int error, const char* description) {
03  fputs(description, stderr);
04}
05 
06// The key callback generally handles any input, but we'll just use the ESC key in this example.
07void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
08  if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
09  {
10    glfwSetWindowShouldClose(window, GL_TRUE);
11  }
12}


为了建立一个OpenGL程序渲染,有许多事情需要做。下面的代码添加了注释,对主要的部分进行了解释。

01// Initialize GLFW, and if it fails to initialize for any reason, print it out to STDERR.
02if (!glfwInit()) {
03  fprintf(stderr, "Failed initialize GLFW.");
04  exit(EXIT_FAILURE);
05}
06 
07// Set the error callback, as mentioned above.
08glfwSetErrorCallback(error_callback);
09 
10// Set up OpenGL options.
11// Use OpenGL verion 4.1,
12glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
13glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
14// GLFW_OPENGL_FORWARD_COMPAT specifies whether the OpenGL context should be forward-compatible, i.e. one where all functionality deprecated in the requested version of OpenGL is removed.
15glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
16// Indicate we only want the newest core profile, rather than using backwards compatible and deprecated features.
17glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
18// Make the window resize-able.
19glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
20 
21// Create a window to put our stuff in.
22GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);
23 
24// If the window fails to be created, print out the error, clean up GLFW and exit the program.
25if(!window) {
26  fprintf(stderr, "Failed to create GLFW window.");
27  glfwTerminate();
28  exit(EXIT_FAILURE);
29}
30 
31// Use the window as the current context (everything that's drawn will be place in this window).
32glfwMakeContextCurrent(window);
33 
34// Set the keyboard callback so that when we press ESC, it knows what to do.
35glfwSetKeyCallback(window, key_callback);
36 
37printf("OpenGL version supported by this platform (%s): \n", glGetString(GL_VERSION));
38 
39// Makes sure all extensions will be exposed in GLEW and initialize GLEW.
40glewExperimental = GL_TRUE;
41glewInit();



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部