Mac端 Open GL初探
一、环境配置
1.创建macOS工程
2.添加OpenGL.framework和GLUT.framework两个系统库
3.拖入资源文件
如果libGLTools.a问价先拖入到工程其他位置,后再移到frameworks文件夹下,则链接错误
4.配置include文件夹的位置
此处是相对位置:“$(SRCROOT)/”+“Mac环境搭建/”
5.删除代理等文件,并创建C++ main文件
6.复制一部分demo中的代码,编译
报错的引用的头文件的引用方式,按照提示”fix”即可——尖括号改成双引号
二、头文件引用
GLShaderManager.h文件引用须放在GLTools.h和GLUT/GLUT.h文件之前,否则会找不到相关头文件
三、OpenGL坐标系认识
1.以面对屏幕为准:向右为X轴正方向,向上为Y轴正方向,从屏幕由里到外为Z轴正方向;
2.坐标系范围(X、Y、Z轴):-1到1;
五、图形绘制——以正弦函数图形为例
//定义全局变量和函数声明
//定义一个着色管理器
GLShaderManager shaderManager;
//GLTools的一个简单容器
GLBatch triangleBatch; void drawSquare();
void drawCircle();
void drawSin(); int moveSquare(int argc, char *argv[]);
int playUpTriangle(int argc,char* argv[]);
void changeSize(int w, int h);
void specialKeys(int key, int x, int y);
void renderScene();
void setUpRC();
void moveSSetUpRC();
//main函数中的准备工作
//初始化一个GLUT库
glutInit(&argc, (char **)argv);
//创建窗口并命名
glutCreateWindow("LYB_Window");
//注册绘图函数
glutDisplayFunc(draw);
//开启循环:处理窗口和操作系统的用户输入等操作
glutMainLoop();
glutMainLoop();开启一个无线执行的循环事件,其后面的代码命令是不会执行的
//设置颜色
//设置窗口背景颜色:red\green\blue\alpha
glClearColor(0.3f, 0.2f, 0.1f, 0.0f);
//清除缓存区
glClear(GL_COLOR_BUFFER_BIT);
//设置图形颜色
glColor3f(0.0f, 0.0f, 1.0f);
windows颜色取值范围:0~255;iOS,macOS取值范围:0~1浮点值
//绘制X、Y坐标轴
//绘图模式:两点连成直线
glBegin(GL_LINES);
//绘制X轴
glVertex2f(-1.0f, 0.0f);
glVertex2f(1.0f, 0.0f);
//绘制Y轴
glVertex2f(0.0f, -1.0f);
glVertex2f(0.0f, 1.0f);
glEnd();
glBegin(GL_LINES)渲染开始,glEnd()渲染结束
//绘制正线曲线
//绘图模式:绘制连续的直线
glBegin(GL_LINE_STRIP);
//factor值越大,则正弦周期越长;反之,越小
const GLfloat factor = 0.1f;
GLfloat x;
for (x=-1.0f/factor; x<1.0f/factor; x+=0.01f) {
//y=k*sinx为正弦函数,k>0,原点左侧半个周期处在第二象限;k<0为第三象限
glVertex2f(x*factor, sin(x)*factor);
}
glEnd();
factor为0.1时的效果图
factor为0.5时的效果图
注:如果以下代码未写,则以上所有的绘制渲染代码都将无效
//强制刷新缓存区,保证绘制命令得以执行
glFlush();
六、方向键控制正方形方块移动
//main函数配置
//设置当前工作目录——仅针对Mac OS
gltSetWorkingDirectory(argv[]); glutInit(&argc, (char **)argv);
/*初始化双缓冲窗口
GLUT_DOUBLE:双缓冲窗口;
GLUT_RGBA:RGBA颜色模式;
GLUT_DEPTH:深度测试;
GLUT_STENCIL:模版缓冲区
*/
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
//设置窗口大小
glutInitWindowSize(, );
glutCreateWindow("MoveSquare"); //注册重塑函数
glutReshapeFunc(changeSize);
//注册显示函数
glutDisplayFunc(renderScene);
glutSpecialFunc(specialKeys); //Open GL API可用和驱动程序初始化正常的容错判断
GLenum status = glewInit();
if (status != GLEW_OK) {
printf("GLew Error : %s\n", glewGetErrorString(status));
return ;
} //设置渲染环境
moveSSetUpRC();
glutMainLoop();
//renderScene()函数控制渲染,specialKeys()控制移动,二者,每次按一下键盘中的方向键,就会被动态调用一次
void renderScene()
{
/*清楚缓存区
GL_COLOR_BUFFER_BIT:指示当前激活的用来进行颜色写入的缓冲区
GL_DEPTH_BUFFER_BIT:指示深度缓存区
GL_STENCIL_BUFFER_BIT:指示模版缓存区
*/
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
//设置颜色
GLfloat vRed[] = {1.0,0.0, 0.0, 1.0};
//传递到存储着色器并在屏幕上渲染图形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
//提交着色器
triangleBatch.Draw();
//后台缓冲区渲染结束后提交给前台
glutSwapBuffers();
}
void specialKeys(int key, int x, int y)//key由系统自动识别获取
{
/*
判断:x值以正方形最左边为基准;y值以正方形最上边为基准;
blockX、blockY值不能赋值于常量——因为vVerts四个点是动态变化的(SpecialKeys也会随之被动态调用);
*/
GLfloat blockX = vVerts[];
GLfloat blockY = vVerts[];
GLfloat stepSize = 0.025; if (key == GLUT_KEY_UP) {
blockY += stepSize;
} if (key == GLUT_KEY_DOWN) {
blockY -= stepSize;
} if (key == GLUT_KEY_LEFT) {
blockX -= stepSize;
} if (key == GLUT_KEY_RIGHT) {
blockX += stepSize;
} //触碰到窗口边界处理
if (blockX < -1.0) {
blockX = -1.0;
} if (blockX > (1.0-blockSize*)) {
blockX = 1.0-blockSize*;
} if (blockY > 1.0) {
blockY = 1.0;
} if (blockY < -1.0+blockSize*) {
blockY = -1.0+blockSize*;
} //正方形四个顶点坐标动态赋值
vVerts[] = blockX;
vVerts[] = blockY-blockSize*; vVerts[] = blockX+blockSize*;
vVerts[] = blockY-blockSize*; vVerts[] = blockX+blockSize*;
vVerts[] = blockY; vVerts[] = blockX;
vVerts[] = blockY; triangleBatch.CopyVertexData3f(vVerts); glutPostRedisplay();
}
请问下:录好的视频demo运行效果如何上传到博客中?不胜感激!
Mac端 Open GL初探的更多相关文章
- mac端的优秀抓包工具——Charles使用
http://my.oschina.net/u/2340880/blog/508688 mac端的优秀抓包工具——Charles使用 一.简介 二.安装与使用 三.使用Charles在mac上进行抓包 ...
- Mac端博客发布工具推荐
引子 推荐一款好用的 Mac 端博客发布工具. 下载地址 echo 博客对接 这里以cnblog为例.接入类型为metawebblog,access point可以在cnblog的设置最下边找到,然后 ...
- 在MAC端查看win7
在MAC端查看win7,在finder中打开网络,输入win7地址,填入用户名和密码,就可以了
- 移动端web开发初探之Vuejs的简单实战
这段时间在做的东西,是北邮人论坛APP的注册页.这个注册页是内嵌的网页,因为打算安卓和IOS平台同时使用.因此实际上就是在做移动端的web开发了. 在这过程中遇到了不少有意思的东西. DEMO的git ...
- 为什么360、百度、腾讯出的Mac端云盘客户端都只有同步盘?(用户量小,同步盘开发成本低,Linux下都没有客户端)
如题,顾名思义,同步盘是用来同步的,不具备增量的功能,像这三家在Windows端出的客户端都是即有同步也有增量的. 陆续出来的,可能大家更多的是跟随策略,不得不提dropbox是这样的形式.mac电脑 ...
- 大前端时代搞定PC/Mac端开发,我有绝招
如果你是一位前端开发工程师,对"跨平台"一词应该不会感到陌生.像常见的前端框架:比如React.Vue.Angular,它们可以做网页端,也可以做移动端,但很少能做到跨PC.Mac ...
- WeTest明星工具-移动端性能测试PerfDog初探
在十一月初,腾讯就官宣了一则消息,腾讯WeTest明星工具-PerfDog面向全球发布.官宣介绍如下:https://wetest.qq.com/lab/view/475.html.我在看到该新闻时, ...
- Mac端SVN工具CornerStone详解
俗话说:"工欲善其事必先利其器": 对于我们程序员来说,不管你是大神,还是小鱼小虾,进入公司之后,都用过源码管理工具,不然你就不是一个合格的程序员,现在各个公司用于源码管理工具通常 ...
- github Mac端的使用案例
1. 本地有一个仓库,是和网页版的github连接在一起的,平时用Terminal来控制的,怎么放在github的客户端呢? 解决办法: 1.1 点击左上角的+ 号,在弹出框中选择Add,然后choo ...
随机推荐
- 阿里react整合库dva demo分析 [转]
同,也是工作中需要,用到 dva , 也找了些文章参考知识点. 更多:http://www.cnblogs.com/heyuqing/p/6844098.html 以下内容为摘出 mark 接着踩 ...
- CentOS7系列--5.3CentOS7中配置和管理Kubernetes
CentOS7配置和管理Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将D ...
- 怎么配置eclipse的联想功能
第一步:打开Eclipse,windows下,打开“window”→“Preferences” :mac下,打开“偏好设置”. 第二步:选择“Java”,展开,“Editor”,选择“Content ...
- JSON学习笔记-3
JSON 对象 1.对象语法 JSON 对象使用在大括号({})中书写. 对象可以包含多个 key/value(键/值)对. key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串 ...
- MongoDB学习笔记(一)——Windows 下安装MongoDB
首先从官网下载mongodb的windows安装包,根据自己系统类型选择32位或者64位版本安装即可,然后根据提示一路下一步即可安装完成.如果没有修改安装目录会默认安装在C:\Program Fil ...
- Asp.net mvc Kendo UI Grid的使用(二)
上一篇文章对Kendo UI做了一些简单的介绍以及基本环境,这篇文章来介绍一下Grid的使用 先上效果图: 要实现这个效果在Controller在要先导入Kendo.Mvc.UI,Kendo.Mvc. ...
- log4j配置详解(非常详细)
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- 第八章 SQL高级处理 8-2 GROUPING运算符
一.同时得到合计行 合计行是不指定聚合键时得到的汇总结果. UNION ALL与UNION的不同之处是它不会对结果进行排序,因此比UNION性能更好. 二.ROLLUP——同时得出合计和小计 GR ...
- 3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
跟踪标记:1204/1222 功能及用途: 捕获SQL Server死锁信息,并自动存放到错误日志(ERRORLOG)中. 举例: USE tempdb GO CREATE TABLE t1(id i ...
- 去除Xcode6创建工程时自带的storyboard
去除Xcode6创建工程时自带的storyboard 1. 删除storyboard文件,并在setting里面清空加载storyboard: 2. 导入ViewController到appDeleg ...