OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW
最近学习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的更多相关文章
- 【PHP】linux搭建PHP运行环境
之前在windows下写了hello world,终归是不够用啊,因为开发环境是Linux,怎么办呢~~~学习学习再学习 写在前面的话:我从百度文库的一个文章里摘出来的,原文章名称<Linux下 ...
- Centos7安装Docker 基于Dockerfile 搭建httpd运行环境
Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...
- JDK+Tomcat搭建JSP运行环境--JSP基础
一.搭建JSP运行环境之前需要了解的基本知识 配置JSP运行环境之前,我们需要了解JSP的运行机制.只有了解JSP运行机制后,我们才能知道为什么要搭建JSP运行环境?如何去搭建JSP运行环境?为什么要 ...
- OSGI企业应用开发(二)Eclipse中搭建Felix运行环境
上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Fe ...
- 【MIT6.828】centos7下使用Qemu搭建xv6运行环境
title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...
- 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API
[手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...
- 树莓派3B搭建NODE-RED运行环境并构建数据流
树莓派3B搭建NODE-RED运行环境并构建数据流 树莓派搭建Node-RED环境 树莓派自2015年开始是默认就带NODE-RED的,但是如今已是2018年:)自带的版本已经很老了,可通过下面的命令 ...
- 9款一键快速搭建PHP运行环境的好工具
9款一键快速搭建PHP运行环境的好工具 胡倡萌 2011/02/19 网络资源 77,063 1 内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难 ...
- 漫游Kafka实战篇之搭建Kafka运行环境
接下来一步一步搭建Kafka运行环境. Step 1: 下载Kafka 点击下载最新的版本并解压. > tar -xzf kafka_2.9.2-0.8.1.1.tgz > cd kafk ...
随机推荐
- 【问题解决方案】git/github本地和远程仓库的重命名
参考: CSDN博文:在Github上重命名仓库 背景: 偶然终于看到一条规范里写着: "通常(注意是通常,尤其是 Web 相关的项目) repo 的命名用小写英文,多个字母之间用连字符(比 ...
- Redis缓存击穿、缓存穿透、缓存雪崩
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上篇文章谈到了Redis分布式锁,实际上就是为了解释为什么做缓存采用Redis而不使用map/guava.缓存 ...
- java nio socket使用示例
这个示例,实现一个简单的C/S,客户端向服务器端发送消息,服务器将收到的消息打印到控制台,并将该消息返回给客户端,客户端再打印到控制台.现实的应用中需要定义发送数据使用的协议,以帮助服务器解析消息.本 ...
- vue使用textare如何正确统计输入字符个数
最近vue做微信公众号的开发,使用weui的textarea输入限制字数(官网例子),并且显示.代码如下:再安卓和电脑都没有问题,但是ios输入的时候,显示字数不正确, 但是输入之后删除其中一个,就可 ...
- SSM框架搭建过程
引入依赖的jar包(pom.xml) a. <!--Spring SpringMVC相关--> spring-webmvc b. <!--Spring事务--> sprin ...
- case when使用的总结
https://blog.csdn.net/changxiangyangy/article/details/86718551 前几天,为了给产品分析当前用户数据结构,写sql的时候使用到了case w ...
- 第07章 JdbcTemplate
第07章JdbcTemplate 1. 概述 为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架. 作为Spring JDBC框架的核心,JDB ...
- POJ1149PIGS
传送门 貌似是最大流建图优化入门题(可惜我还是不会) 最暴力的建图当然是源点连每个猪圈然后猪圈需要拆成n个点分给每个人这个必定是跑不过的 所以我们可以进行优化 很明显没有被动过的猪圈一直是不变的可以不 ...
- 观察者模式Observer
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11409319.html 1. 定义定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依 ...
- 监控服务(keepalived,httpd)
#!/bin/bashpidof httpdif [ $? -eq 0 ];then echo "httpd is ok"else echo "httpd is not ...