iOSiOS-开发@IT·互联网

Mac 下XCode 配置GTools/GLFW /GLEW 做

2017-03-03  本文已影响1495人  d20cdad48d2e

正题

首先在mac中要安装glew和glfw,这里我安装这两个工具使用的是homebrew包管理,这东西超级好用,安装命令很简单,大家可以去网络上找一下很多资料的。安装完homebrew之后,用以下两个命令安装glew和glfw:

![ ![屏幕快照 2017-03-03 下午11.06.26.png](http://upload-images.jianshu.io/upload_images/1814883-8814bd4ca82012a4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](http://upload-images.jianshu.io/upload_images/1814883-0d4d934a77d851ea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

下面是配置路径

在刚才那个路径usr/local/Cellar路径下分别找到header 和 lib 对应的路径设置成下面的样子就可以用了:

屏幕快照 2017-03-03 下午1.35.24.png

重点讲下GLTools的配置过程

配置 header seacher path 和 library seacher path

配置截屏如下:

屏幕快照 2017-03-03 下午11.34.13.png

library search path 也写入同样的就好了 如 $(glfw_lib) 这样就好

最后一步导入要用到的库文件:

屏幕快照 2017-03-03 下午11.37.50.png

其中红色圈住的要走add other 中通过 在 usr/local 文件夹下导入
大功告成
下面是使用的效果:

//
//  main.cpp
//  LeeOpenGL01_QUAD
//
//  Created by LiYang on 17/3/3.
//  Copyright © 2017年 LiYang. All rights reserved.
//  有问题联系 939428468 。

#include <iostream>
#include <GLShaderManager.h>
#include <GLTools.h>
#include <GLUT/GLUT.h>

GLBatch squareBatch;
GLShaderManager shaderManager;

GLfloat blockSize  = 0.1f;
GLfloat vVertes[]  = {-blockSize - 0.5f,-blockSize,0.0f,
                     blockSize  - 0.5f,-blockSize,0.0f,
                     blockSize  - 0.5f,blockSize,0.0f,
                     -blockSize - 0.5f,blockSize,0.0f,};


/**
初始化着色器和四边形
*/
void setupRC(){
   //清除缓存区
   glClearColor(1, 0, 1, 1);
   //着色器初始化
   shaderManager.InitializeStockShaders();
   //加载四边形
   squareBatch.Begin(GL_TRIANGLE_FAN, 4);
   squareBatch.CopyVertexData3f(vVertes);
   squareBatch.End();
}

/**
碰撞检测以及移动坐标
*/
void BounceFunction(void){
   static GLfloat xDir = 1.0f;
   static GLfloat yDir = 1.0f;
   
   GLfloat stepSize    = 0.005f;
   GLfloat blockX      = vVertes[0]; // 左下
   GLfloat blockY      = vVertes[7]; // 右上
   
   blockY += stepSize * yDir;
   blockX += stepSize * xDir;
   
   // Collision detection
   if(blockX < -1.0f) { blockX = -1.0f; xDir *= -1.0f; }
   if(blockX > (1.0f - blockSize * 2)) { blockX = 1.0f - blockSize * 2; xDir *= -1.0f; }
   if(blockY < -1.0f + blockSize * 2)  { blockY = -1.0f + blockSize * 2; yDir *= -1.0f; }
   if(blockY > 1.0f) { blockY = 1.0f; yDir *= -1.0f; }
   
   // Recalculate vertex positions
   vVertes[0] = blockX;
   vVertes[1] = blockY - blockSize*2;
   
   vVertes[3] = blockX + blockSize*2;
   vVertes[4] = blockY - blockSize*2;
   
   vVertes[6] = blockX + blockSize*2;
   vVertes[7] = blockY;
   
   vVertes[9] = blockX;
   vVertes[10] = blockY;
   
   squareBatch.CopyVertexData3f(vVertes);
   
   
}

/**
渲染情景
*/
void renderScence(void){

   // 这部才是真正的清理缓存区,包括以下几种清理方式,防止上次缓冲区数据和这次重叠了
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
   
   GLfloat vBlue[] = {0.0f,0.0f,1.0f,1.0f};
   //设置坐标和颜色
   shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vBlue);
   squareBatch.Draw();
   
   glutSwapBuffers();
   //加入碰撞检查
   BounceFunction();
   //标记需要重新绘制
   glutPostRedisplay();
   
   
}

void ChangeSize(int w, int h)
{
   glViewport(0, 0, w, h);
}


int main(int argc,char * argv[]) {

   gltSetWorkingDirectory(argv[0]);
   
   glutInit(&argc, argv);
   //函数功能为设置初始显示模式
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
   glutInitWindowSize(800, 600);
   glutCreateWindow("Bouncing Block");
   
   GLenum err = glewInit();
   if (GLEW_OK != err)
   {
       // Problem: glewInit failed, something is seriously wrong.
       fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
       return 1;
   }
   //glutReshapeFunc是窗口改变的时候调用的函数,在这个里面可以根据缩放后的窗口重新设置
   glutReshapeFunc(ChangeSize);
   //glutDisplayFunc函数用于注册一个绘图函数, 这样操作系统在必要时刻就会对窗体进行重新绘制操作
   glutDisplayFunc(renderScence);
   setupRC();
   glutMainLoop();
   return 0;
}

效果图:

屏幕快照 2017-03-03 下午11.45.29.png

demo 代码

上一篇下一篇

猜你喜欢

热点阅读