资源准备及简介
OpenGL在Mac OS系统下的环境搭建需要一些资源: CLToolsGLTools官网、glew、libGLTools.a.
OpenGL 环境资源包 密码:cc09
GLTools
GLTools包含一个3D数学库,用于操作矩阵和向量,并依赖GLEW来获得OpenGL 3.3对生成和呈现一些简单3D对象以及管理视图视锥、相机和变换矩阵的功能的完全支持,以头文件和二进制包的形式发布和使用
配置OpenGL环境
有了这些资源包,我们接下来进行环境的搭建,首先创建项目
OpenGL环境搭建项目创建
导入环境所需的资源和系统库,进行配置
添加系统库GLUT(英文全写:OpenGL Utility Toolkit)是一个处理OpenGL程式的工具库,用于开发独立于窗口系统的OpenGL程序,即该库打包了很多的窗口操作,提供了独立于具体操作系统的API,让你快速的在OpenGL开发中完成窗口相关操作,如窗口显示、输入设备读取、多级级联菜单、多窗口管理等等便捷功能。
添加资源配置路径 处理项目中文件 创建程序启动入口文件程序测试环境搭建
#include<stdio.h>
// 做色器管理器 允许我们创建并管理着色器,还提供一组存储着色器,能够进行一些初步的渲染操作
#include "GLShaderManager.h"
#include "GLTools.h"
#include <GLUT/GLUT.h>
GLShaderManager shaderManager;
GLBatchtriangleBatch;
// 窗口大小改变时接受新的宽高,其中0,0代表窗口中视口的左下角坐标,w h代表像素
voidchangeSize(intw,inth)
{
glViewport(0,0, w, h);
}
voidRenderScene(void)
{
// 清楚一个或一组特定的缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
// 颜色设置
GLfloatvRed[] = {1.0,0.0,0.0,1.0f};
//传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标系在屏幕上渲染几何图形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//提交着色器
triangleBatch.Draw();
//将在后台缓冲区进行渲染,然后在结束时提交到前台
glutSwapBuffers();
}
voidsetupRC()
{
// 设置背景颜色
glClearColor(0.98f, 0.40f, 0.7f, 1);
// 初始化着色器管理器
shaderManager.InitializeStockShaders();
// 设置三角形,其中数组vVert包含所有3个顶点x,y,笛卡尔坐标对
GLfloatvVerts[] = {
-0.5f,0.0f,0.0f,
0.5f,0.0f,0.0f,
0.0f,0.5f,0.0f
};
// 批次处理
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
intmain(intargc,char*argv[])
{
gltSetWorkingDirectory(argv[0]);
// 初始化GLUT库
glutInit(&argc, argv);
/*初始化双缓冲窗口.GLUT_DOUBLE:双缓冲窗口;GLUT_RGBA:RGBA颜色模式;GLUT_DEPTH:深度测试;GLUT_STENCIL :模板缓冲区*/
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
// 窗口大小
glutInitWindowSize(800, 600);
// 窗口标题
glutCreateWindow("Triangle");
// 注册回调函数 相当于代理
glutReshapeFunc(changeSize);
// 注册一个显示回调
glutDisplayFunc(RenderScene);
GLenumstatus =glewInit();
if(GLEW_OK!= status) {
printf("GLEW Error:%s\n",glewGetErrorString(status));
return1;
}
setupRC();
//无限循环,负责处理窗口和操作系统的用户输入等操作
glutMainLoop();
return 0;
}
运行效果图
网友评论