我是在学习Qt的过程中,接触到2D、3D制图,也看到很多项目中会将Qt和OpenGL结合起来做开发,同时也对Qt里面的坐标系统云里雾里,遂决定两者结合起来学一下。

      OpenGL是一个图形API,并不是一个独立的平台,因为我是基于QT C++平台,所以也选择了C++来作为OpenGL的工作语言。

       首先搭建OpenGl的环境,就去网上找到一个视频教程:基于SDL2.0的库,照着视频配置了环境,敲了一通代码,敲得云里雾里,着色的时候出现Bug,没有理论支持,搜索解决不了所以决定先更换环境。

   SDL2.0安装环境为 Win10 + VS2017 + SDL2-devel-2.0.10-VC+glm-0.9.9.6+glew-2.1.0-win32,将lib库和include文件夹抽取出来,方便项目调用,dll库放入执行文件夹内。

       1)在调试三角形的时候,VS报错,发现还需要一个包:glutdlls37beta,而这步在教程里并没有出现

       2)调试着色环境的时候,bug解决不了,怀疑和视频中的版本不一致导致,决定找一个详细的教程。

 

根据以下教程进行重新开始:

https://learnopenglcn.github.io/01%20Getting%20started/01%20OpenGL/

 

基于glfw-3.3+GLAD+VS2017

1)CMake生成GLFW工程文件(win32),VS2017直接编译GLFW.sln工程(x86 + debug)

2)GLAD是在线服务,选择OpenGl版本的时候,可以下载glview工具来查看你的显卡支持的OpenGl版本,我的是Version4.3

 

github上的这篇教程很详细,基本按照步骤来做,我用的VS2017 版本些许出入也并没有影响编译。

       

教程里说GLFW替代了GLEW,我个人对SDL2和GLFW的区别也查了一下相关资源

 

 

 

上下文与窗口包

OpenGL 上下文(英语:OpenGL context)的创建过程相当复杂,在不同的操作系统上也需要不同的做法。因此很多游戏开发和用户界面库都提供了自动创建 OpenGL 上下文的功能,其中包括SDLAllegro、SFML、FLTKQt等。也有一些库是专门用来创建 OpenGL 窗口的,其中最早的便是GLUT,后被freeglut取代,比较新的也有GLFW可以使用。

  • 以下包可以用来创建并管理 OpenGL 窗口,也可以管理输入,但几乎没有除此以外的其它功能:

    • GLFW——跨平台窗口和键盘、鼠标、手柄处理;偏向游戏

    • freeglut——跨平台窗口和键盘、鼠标处理;API 是 GLUT API 的超集,同时也比 GLUT 更新、更稳定

    • GLUT——早期的窗口处理库,已不再维护

  • 支持创建 OpenGL 窗口的还有一些“多媒体库”,同时还支持输入、声音等类似游戏的程序所需要的功能:

    • Allegro 5——跨平台多媒体库,提供针对游戏开发的 C API

    • SDL——跨平台多媒体库,提供 C API

    • SFML——跨平台多媒体库,提供 C++ API;同时也提供 C#、Java、Haskell、Go 等语言的绑定

  • 窗口包

    • FLTK——小型的跨平台 C++ 窗口组件库

    • Qt——跨平台 C++ 窗口组件库,提供了许多 OpenGL 辅助对象,抽象掉了桌面版 OpenGL 与 OpenGL ES 之间的区别

    • wxWidgets——跨平台 C++ 窗口组件库

 

Qt中已经封装好OpenGL,并且和GUI以及IO相关的处理Qt更便捷,结合教程学习起来更轻松一些。

 
posted on 2019-11-17 10:47  AmyBKLP  阅读(439)  评论(0编辑  收藏  举报