所需资料,请下载后将文件名修改为libs.zip

创建Mac项目: 01-OpenGL环境搭建



2. 利用Pod导入需要的资源
image.png

3. 删除不需要的文件和配置:
image.png

4. 将main.m 修改为 main.cpp或者 main.mm

5. 将以下代码复制到main文件中

  1. #include "GLTools.h"
  2. #include "GLShaderManager.h"
  3. #ifdef __APPLE__
  4. #include <glut/glut.h>
  5. #else
  6. #define FREEGLUT_STATIC
  7. #include <GL/glut.h>
  8. #endif
  9. GLBatch triangleBatch;
  10. GLShaderManager shaderManager;
  11. //窗口大小改变时接受新的宽度和高度,其中0,0代表窗口中视口的左下角坐标,w,h代表像素
  12. void ChangeSize(int w,int h)
  13. {
  14. glViewport(0,0, w, h);
  15. }
  16. //为程序作一次性的设置
  17. void SetupRC()
  18. {
  19. //设置背影颜色
  20. glClearColor(0.0f,0.0f,1.0f,1.0f);
  21. //初始化着色管理器
  22. shaderManager.InitializeStockShaders();
  23. //设置三角形,其中数组vVert包含所有3个顶点的x,y,笛卡尔坐标对。
  24. GLfloat vVerts[] = {
  25. -0.5f,0.0f,0.0f,
  26. 0.5f,0.0f,0.0f,
  27. 0.0f,0.5f,0.0f,
  28. };
  29. //批次处理
  30. triangleBatch.Begin(GL_TRIANGLES,3);
  31. triangleBatch.CopyVertexData3f(vVerts);
  32. triangleBatch.End();
  33. }
  34. //开始渲染
  35. void RenderScene(void)
  36. {
  37. //清除一个或一组特定的缓冲区
  38. glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
  39. //设置一组浮点数来表示红色
  40. GLfloat vRed[] = {1.0f,0.0f,0.0f,1.0f};
  41. //传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形
  42. shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
  43. //提交着色器
  44. triangleBatch.Draw();
  45. //将在后台缓冲区进行渲染,然后在结束时交换到前台
  46. glutSwapBuffers();
  47. }
  48. int main(int argc,char* argv[])
  49. {
  50. //设置当前工作目录,针对MAC OS X
  51. gltSetWorkingDirectory(argv[0]);
  52. //初始化GLUT库
  53. glutInit(&argc, argv);
  54. /*初始化双缓冲窗口,其中标志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指
  55. 双缓冲窗口、RGBA颜色模式、深度测试、模板缓冲区*/
  56. glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
  57. //GLUT窗口大小,标题窗口
  58. glutInitWindowSize(800,600);
  59. glutCreateWindow("Triangle");
  60. //注册回调函数
  61. glutReshapeFunc(ChangeSize);
  62. glutDisplayFunc(RenderScene);
  63. //驱动程序的初始化中没有出现任何问题。
  64. GLenum err = glewInit();
  65. if(GLEW_OK != err) {
  66. fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
  67. return 1;
  68. }
  69. //调用SetupRC
  70. SetupRC();
  71. glutMainLoop();
  72. return 0;
  73. }

参考链接