OpenGL入门 -- 环境搭建
上一篇介绍一下
OpenGL
的专业名词的相关知识,本篇来详细的记录一下OpenGL
的环境搭建,以及OpenGL
中的“Hello Word”
。
准备资源
搭建环境,需要以下准备资源,也可以通过链接下载。
- CLTools
- glew
- libGLTools.a
OpenGL
环境搭建资源:百度网盘链接 ,密码:at14
。
搭建OpenGL环境
-
打开
Xcode
新建项目,选择macOS
,选择APP
-
添加
OpenGL.framework
和GLUT.framework
两个系统库。 -
添加
CLTools.h
和glew.h
,在build settings
中输入Header search path
,设置路径。- 拖入下载好的资源包
include
到项目中 - 拖入下载好的资源包
libGLTools.a
文件到Framework
文件夹中 - 在
build settings
中输入Header search path
,直接将include
文件拖入,设置路径。
- 拖入下载好的资源包
-
删除原有项目的
AppDelegate.h
、AppDelegate.m
、ViewController.h
、ViewController.m
和main.m
文件,并创建main.cpp
文件。 -
在
main.cpp
文件中,添加下面代码#include <stdio.h> #include "GLShaderManager.h" #include "GLTools.h" #include <glut/glut.h> GLBatch triangleBatch; GLShaderManager shaderManager; //窗口大小改变时接受新的宽度和高度,其中0,0代表窗口中视口的左下角座标,w,h代表像素 void ChangeSize(int w,int h) { glViewport(0,0, w, h); } //为程序作一次性的设置 void SetupRC() { //设置背影颜色 glClearColor(0.0f,1.0f,1.0f,0.0f); //初始化着色管理器 shaderManager.InitializeStockShaders(); //设置三角形,其中数组vVert包含所有3个顶点的x,y,笛卡尔座标对。 GLfloat vVerts[] = { -0.8f,0.0f,0.0f, 0.6f,0.0f,0.0f, 0.1f,0.2f,0.0f, }; //批次处理 triangleBatch.Begin(GL_TRIANGLES,3); triangleBatch.CopyVertexData3f(vVerts); triangleBatch.End(); } //开始渲染 void RenderScene(void) { //清除一个或一组特定的缓冲区 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); //设置一组浮点数来表示紫色 GLfloat vRed[] = {1.0f,0.0f,1.0f,1.0f}; //传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔座标第在屏幕上渲染几何图形 shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed); //提交着色器 triangleBatch.Draw(); //将在后台缓冲区进行渲染,然后在结束时交换到前台 glutSwapBuffers(); } int main(int argc,char* argv[]) { //设置当前工作目录,针对MAC OS X gltSetWorkingDirectory(argv[0]); //初始化GLUT库 glutInit(&argc, argv); /*初始化双缓冲窗口,其中标志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指 双缓冲窗口、RGBA颜色模式、深度测试、模板缓冲区*/ glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL); //GLUT窗口大小,标题窗口 glutInitWindowSize(800,600); glutCreateWindow("Triangle"); //注册回调函数 glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); //驱动程序的初始化中没有出现任何问题。 GLenum err = glewInit(); if(GLEW_OK != err) { fprintf(stderr,"glew error:%s\n",glewGetErrorString(err)); return 1; } //调用SetupRC SetupRC(); glutMainLoop(); return 0; }
上面的代码会有一些警告 ⚠️,可用下面方法关闭
最终展示效果如下,OpenGL
的Hello Word
搞定。