最近学习OpenGL,读OpenGL宝典一头蒙,各种gl函数不知所云。逐决定先搭OpenGL运行环境,详细如下。

1、首先OpenGL是什么?是一个标准规范,是一个巨大的状态机,并无具体实现,大多数实现都是由显卡厂商编写的。

创建一个OpenGL上下文(Context)和一个用于显示的窗口,这个很底层。当然有一些库可以选择,这里选择用GLFW。

运行环境为win10, vs2013。

2、下载编译GLFW库,从库源码入手编译静态库,免得有兼容问题。

下载地址:https://www.glfw.org/download.html

github:https://github.com/glfw/glfw/tree/master

下载后

3、用cmake编译GLFW静态库。

cmake下载地址:https://cmake.org/download/

    运行cmake-gui.exe

配置如下:

先点 Configure, 再点Generate,多点几下,没有红色报错即可。

进入目录 D:\code\OpenGL\glfw\glfw-master\build , 用vs2013打开 GLFW.sln,仅编译 glfw 工程即可,其它无识。 生成静态库 build\src\Debug\glfw3.lib, include目录是GLFW的头文件;‘

把glfw3.lib和头文件整理到一个新止录,prebuilt,如图:

3、下载编译GLEW,用于管理OpenGL函数指针;

下载地址:http://glew.sourceforge.net/index.html

下载zip版本 glew-2.1.0.zip,解压依然用cmake编译,配置如下:

用vs2013打开glew.sln,仅编译glew_s工程,生成静态库libglew32d.lib

同样整理静态库和头文件到prebuilt,如图:

4、新建空白C++工程,取名为 hi-opengl,设置工程属性如图,引入GLFW、GLEW的头文件目录和静态库目录:

添加链接器,加入此三项 opengl32.lib;libglew32d.lib;glfw3.lib;   如图:

5、开始编定OpenGL空白窗口代码。

建一个空白cpp类,名为hi.cpp,代码如下:

依次是:  初始化glfw、创建glfw窗口、初始化glew、从glew的window取出宽度和高度、调用gl的视口、添加游戏主循环、检查事件、opengl清屏调用、交换缓充区、结束。

// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW
#include <GLFW/glfw3.h>
#include <iostream> int main(){
// glfw init
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, );
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, );
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); //create a glfw window
GLFWwindow *window = glfwCreateWindow(, , "hi", nullptr, nullptr);
if (window == nullptr){
std::cout << "create glfw window failed..." << std::endl;
glfwTerminate();
return -;
}
glfwMakeContextCurrent(window);//set current window // glew init
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK){
std::cout << "glew init failed..." << std::endl;
return -;
} //get width and height from glfw window
int width, height;
glfwGetFramebufferSize(window, &width, &height);
//define the glViewport
glViewport(, , width, height); //add the game loop
while (!glfwWindowShouldClose(window)){
//check event
glfwPollEvents(); //your OpenGL code logical
//now clear window
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);//the gl color buffer bit //swap buffer
glfwSwapBuffers(window);
} //the end, glfw window has been closed
glfwTerminate();
return ;
}

6、运行效果,得到一个蓝绿低的空白窗口,如果报错就自行检查以上各步骤。

7、有这个开始,可以尽情接受各种OpenGL函数的制裁!!

OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW的更多相关文章

  1. 【PHP】linux搭建PHP运行环境

    之前在windows下写了hello world,终归是不够用啊,因为开发环境是Linux,怎么办呢~~~学习学习再学习 写在前面的话:我从百度文库的一个文章里摘出来的,原文章名称<Linux下 ...

  2. Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

  3. JDK+Tomcat搭建JSP运行环境--JSP基础

    一.搭建JSP运行环境之前需要了解的基本知识 配置JSP运行环境之前,我们需要了解JSP的运行机制.只有了解JSP运行机制后,我们才能知道为什么要搭建JSP运行环境?如何去搭建JSP运行环境?为什么要 ...

  4. OSGI企业应用开发(二)Eclipse中搭建Felix运行环境

    上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Fe ...

  5. 【MIT6.828】centos7下使用Qemu搭建xv6运行环境

    title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...

  6. 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API

    [手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...

  7. 树莓派3B搭建NODE-RED运行环境并构建数据流

    树莓派3B搭建NODE-RED运行环境并构建数据流 树莓派搭建Node-RED环境 树莓派自2015年开始是默认就带NODE-RED的,但是如今已是2018年:)自带的版本已经很老了,可通过下面的命令 ...

  8. 9款一键快速搭建PHP运行环境的好工具

    9款一键快速搭建PHP运行环境的好工具 胡倡萌 2011/02/19 网络资源 77,063 1     内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难 ...

  9. 漫游Kafka实战篇之搭建Kafka运行环境

    接下来一步一步搭建Kafka运行环境. Step 1: 下载Kafka 点击下载最新的版本并解压. > tar -xzf kafka_2.9.2-0.8.1.1.tgz > cd kafk ...

随机推荐

  1. python3学习笔记——数字、字符串、列表、字典、元组

    什么是python解释器? python代码在解释器中运行.解释器是代码与计算机硬件之间的软件逻辑层. python的执行过程                                      ...

  2. Codeforces 1195E. OpenStreetMap (单调队列)

    题意:给出一个n*m的矩形.询问矩形上所有的a*b的小矩形的最小值之和. 解法:我们先对每一行用单调栈维护c[i][j]代表从原数组的mp[i][j]到mp[i][j+b-1]的最小值(具体维护方法是 ...

  3. sql对表的操作

    --insert into pppcopy select * from ppp //从表ppp中获取数据,并将其插入到pppcopy中,只拷贝表的数据,不拷贝表的结构(前提:表pppcopy1存在) ...

  4. php socket简单原理及实现笔记

    1.什么是socket? socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,连接的一端称为一个socket. 因此socket运行是置少有2个端组成,一个为服务端一个为客户端(客户端 ...

  5. 升级ceph

    参考文档 https://blog.51cto.com/jerrymin/2140258 https://www.virtualtothecore.com/en/upgrade-ceph-cluste ...

  6. docker监控方案实践(cadvisor+influxdb+grafana)

    一.概要 1.1 背景 虚拟化技术如今已经非常热门,如果你不知道什么是虚拟化,那你应该了解虚拟机.虚拟化技术如同虚拟机一样,用于将某些硬件通过软件方式实现"复制",虚拟出" ...

  7. Linux系统之-TCP-IP链路层

    一.基本 网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层. 为达到这一目 ...

  8. (转)使用OpenGL显示图像(五)添加移动

    添加移动 编写:jdneo - 原文:http://developer.android.com/training/graphics/opengl/motion.html 转:http://hukai. ...

  9. Postgresql临时表

    PostgreSQL支持两类临时表,会话级和事务级临时表.在会话级别的临时表中,在整个会话的生命周期中,数据一直保存.事务级临时表,数据只存在于这个事务的生命周期中.不指定临时表的属性, Postgr ...

  10. dotnet core项目的nuget存储路径

    Where's the package location in aspnet core For project.json the nuget directory is in the user prof ...