LearnOpenGL - 搭建Mac环境

搭建Mac环境


©shuan9999

1. 创建Xcode工程,如图:

在这里插入图片描述

2. 添加OpenGL.frameworkGLUT.framework,如图:

在这里插入图片描述

3. 添加libGLTools.a,并配置好头文件

  • 将libGLTools.a拖到Frameworks中
  • 删除文件:AppDelegate.h、AppDelegate.m、main.m、ViewController.h 、ViewController.m
  • 创建:main.cpp

如图:
在这里插入图片描述

4. 配置Header Search path

这里如果没有配置好,工程中无法直接引到头文件
Xcode中有Header Search path和User Header Search path两个配置头文件的地方,这里我两个都配了

如图:
在这里插入图片描述

需要库和头文件,联系作者

示例程序

//
//  main.cpp
//  LearnOpenGL
//
//  Created by Shuan on 2019/9/13.
//  Copyright © 2019 shuan9999. All rights reserved.
//

#include "GLTools.h"
#include <glut/glut.h>
#include <stdio.h>

GLBatch triangleBatch;
GLShaderManager shaderManager;


/// 窗口大小改变的回调
/// @param w 窗口宽度,单位像素
/// @param h 窗口高度
void onWindowSizeChange(int w, int h) {
    //0,0代表视口左下角坐标
    glViewport(0, 0, w, h);
}

void init() {
    //设置背景颜色
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
    //初始化着色管理器
    shaderManager.InitializeStockShaders();
    //设置三角形顶点坐标,数组中包含3个顶点的x,y,z笛卡尔坐标
    GLfloat vVerts[] = {
        -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();
}

void render(void) {
    //清除特定缓冲区
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
    //红色
    GLfloat vRed[] = {1.0f, 0.0f, 0.0f, 1.0f};
    //传递到着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标在屏幕上渲染几何图形
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
    //提交着色器
    triangleBatch.Draw();
    //将在后台缓冲区中渲染,结束时交换到前台显示
    glutSwapBuffers();
}


int main(int argc, char* argv[]) {
    //设置工作目录,仅针对macOS X
    gltSetWorkingDirectory(argv[0]);
    //初始化GLUT库
    glutInit(&argc, argv);
    //初始化双缓冲窗口,GLUT_DOUBLE:ss双缓冲窗口,GLUT_RGBA:RGBA颜色模式,GLUT_DEPTH:深度测试,GLUT_STENCIL:模板缓冲区
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
    //设置窗口大小
    glutInitWindowSize(800, 600);
    //设置窗口标题
    glutCreateWindow("Hello Triangle");
    //注册窗口变换的回调
    glutReshapeFunc(onWindowSizeChange);
    //c注册渲染回调
    glutDisplayFunc(render);
    //初始化驱动程序
    GLenum err = glewInit();
    if(GLEW_OK != err) {
        fprintf(stderr,"glew error:%s\n", glewGetErrorString(err));
        return 1;
    }
    //开始初始化
    init();
    //开启runloop
    glutMainLoop();
    return 0;
}

运行结果如图:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值