Mac 下XCode 配置GTools/GLFW /GLEW 做
2017-03-03 本文已影响1495人
d20cdad48d2e
正题
首先在mac中要安装glew和glfw,这里我安装这两个工具使用的是homebrew包管理,这东西超级好用,安装命令很简单,大家可以去网络上找一下很多资料的。安装完homebrew之后,用以下两个命令安装glew和glfw:
- brew install glew
- brew install glfw3
安装完成后会在 : /usr/local/Cellar 这个路径下找到想要的头文件和库文件等按住cmd+shift+g 可以进入查看:
下面是配置路径
在刚才那个路径usr/local/Cellar路径下分别找到header 和 lib 对应的路径设置成下面的样子就可以用了:
屏幕快照 2017-03-03 下午1.35.24.png重点讲下GLTools的配置过程
- 先要去github 上下载 GLTools 这个需要编译出库文件才能使用
- 链接地址:GLTools
- 下载完成解压后 进入终端 cd 到 解压的文件下依次执行以下命令:
cd build
cmake ..
make
sudo make install
sudo ldconfig - 执行上面的命令后会在 usr/local 的路径下生成对应的头文件 和 库文件
- 剩下步骤和上面一样了 ,就多了这个的编译过程
- 注意再使用过程中如果没有 安装 cmake 可以 先执行 brew install cmake 来安装
配置 header seacher path 和 library seacher path
配置截屏如下:
屏幕快照 2017-03-03 下午11.34.13.pnglibrary 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