创建一个窗口
来源:互联网 发布:凸轮弹簧机编程 编辑:程序博客网 时间:2024/04/29 18:51
OPENGL简介
通俗来讲OPENGL就是一套图形API的集合,其实不单单是这样,它也是API执行的规范。OPENGL整体其实是一个巨大的状态机(State Machine),根据一系列变量的值来确定OPENGL的行为,这些不同的状态我们统称为OPENGL上下文(Context)。OPENGL里面含有很多不同的Object。每个对象都代表一个状态,通过设置很多对象,来让OPENGL执行不同的功能。
OPENGL环境安装
OpenGL环境开发工具包
我的环境是:Win10+vs2015+GTX970M+OPENGL3.3,要想在电脑上可以跑OPENGL的程序,首先需要配置OPENGL需要的一些扩展库
- GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入。首先我们需要下载这样的一个库需要用到里面的include文件夹里面的内容和编译之后生成的库。(其实这个库最好还是在自己的电脑上亲自编译一下,这样可能会避免以后出现的不必要的错误,我们可以使用一个叫做CMake的东西来做这些事情,首先我们打开下载的CMake的GUI启动方式,然后我们在glfw文件夹下面创建一个叫做build的文件夹,这个文件夹存放CMake生成的lib库文件要以及其他的文件,然后把glfw目录作为源目录,目标目录选为build,然后Configure,Configure,Generate)生成完毕之后你可以在build目录之后看到GLFW.sln,用vs打开,然后运行,生成库文件glfw3.lib(因为我们用的OPENGL3.3),这个库文件在src的Debug目录下。好了,生成了这些我们所要的文件之后我们就需要导入vs以便让我们的项目可以顺利运行。
- 找到IDE或者编译器的/lib和/include文件夹,添加GLFW的include文件夹里的文件到IDE的/include文件夹里去。用类似的方法,将glfw3.lib添加到/lib文件夹里去。虽然这样能工作,但这不是推荐的方式,因为这样会让你很难去管理库和include文件,而且重新安装IDE或编译器可能会导致这些文件丢失。
- 推荐的方式是建立一个新的目录包含所有的第三方库文件和头文件,并且在你的IDE或编译器中指定这些文件夹。我个人会使用一个单独的文件夹,里面包含Libs和Include文件夹,在这里存放OpenGL工程用到的所有第三方库和头文件。这样我的所有第三方库都在同一个位置(并且可以共享至多台电脑)。然而这要求你每次新建一个工程时都需要告诉IDE/编译器在哪能找到这些目录。
然后我们用vs新建一个Visual C++的空项目,我们进入项目的属性里面然后选择VC++ Directories(VC++ 目录)选项卡(如下图)。在下面的两栏添加目录:
这里你可以把自己的目录加进去,让工程知道到哪去搜索。你需要手动把目录加在后面(这样的方式是对上面的2的设置方法)
对于1来说需要在Linker(链接器)选项卡里的Input(输入)选项卡里添加glfw3.lib这个文件:
要链接一个库我们必须告诉链接器它的文件名。库名字是glfw3.lib,我们把它加到Additional Dependencies(附加依赖项)字段中
现在GLFW库的安装已经完成了。
2.OpenGL库
对于windows系统来说安装vs的时候OpenGl32.lib已经包含在Microsoft SDK里面了,我们只需要把opengl32.lib写进Additional Dependencies(附加依赖项)字段中就可以了。
3.glew库
glew库的安装和glfw差不多,把include文件夹里面的内容放到vs安装目录下的include里面。然后把glew32s.lib放入lib文件夹里面,最后在项目的Additional Dependencies(附加依赖项)写进去就可以了。
4.glm库
这个是OpenGL的数学库,这个库安装起来要方便许多,只需要把里面的include文件夹里面的内容放到vs的include里面就可以了。
以上就是基本库的安装,接下来我们创建一个空窗口的程序。
#include "iostream"//GLEW#define GLEW_STATIC#include "GL/glew.h"//GLFW#include "GLFW/glfw3.h"int main(){glfwInit();//初始化GLFWglfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//声明opengl的主版本号和次版本号glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//声明opengl为核心模式glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);//窗口不可变换大小//接下来创建一个窗口对象GLFWwindow* window = glfwCreateWindow(800, 600, "zzj's opengl", nullptr, nullptr);if (window == nullptr){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();//结束窗口,释放资源return -1;}glfwMakeContextCurrent(window);//将当前窗口设置主线程的上下文glewExperimental = GL_TRUE;//这是初始化opengl指针if (glewInit() != GLEW_OK){std::cout << "Failed to initialize GLEW" << std::endl;return -1;}int width, height;glfwGetFramebufferSize(window, &width, &height);glViewport(0, 0, width, height);//设置窗口的维度while (!glfwWindowShouldClose(window)){glfwPollEvents();//检查触发事件glfwSwapBuffers(window);//交换颜色缓冲,重绘}glfwTerminate();//释放资源return 0;}
1 0
- 创建一个windows窗口
- 如何创建一个窗口
- 创建一个窗口
- DirectX 创建一个窗口
- 创建一个窗口
- [OpenGL]创建一个窗口
- 3 创建一个窗口
- windows创建一个窗口
- 用SDL创建一个窗口
- 创建一个窗口的过程
- OpenGL 创建一个CEGUI窗口
- 创建一个全屏的窗口
- 用SDL创建一个窗口
- 创建一个黑黑的窗口
- 用SDL创建一个窗口
- 用SDL创建一个窗口
- 创建一个win32窗口程序
- OpenGL中创建一个窗口
- Flume简介和配置实战
- httpclient4 取得cookie信息并保存
- 域名解析
- red5整合tomcat下载
- 关于Mysql删除语句delete相关问题
- 创建一个窗口
- spring整合JMS一同步收发消息(基于ActiveMQ的实现)
- 从零开始学_JavaScript_系列(26)——dojo的aspect方法
- 最长公共子序列
- Android DiskLruCache完全解析,硬盘缓存的最佳方案
- Jenkins+maven+git的可持续集成实践
- 《GO学习笔记》------------------------(1)
- 将十六进制数拆分成两个ASCII码值
- 埃及分数问题(迭代加深搜索)