opengl学习笔记(一)给个画面先

文章讲述了作者在Windows11环境下,使用CLion和VS2022配置OpenGL环境的过程,强调了OpenGL只是一个图形规范,依赖于GPU驱动和库。通过安装GLFW和链接opengl32.lib,作者成功实现了基础画面的绘制。
摘要由CSDN通过智能技术生成

    参考B站搬运的教程【最好的OpenGL教程之一】 https://www.bilibili.com/video/BV1MJ411u7Bc/?share_source=copy_web&vd_source=126dc875b44432cc644536c84a2bdfa6

    结论: c++做编程语言,windows11操作系统,装了vs2022,实现了CLion上的“整出个画面”

    以下是正文

    opengl本身什么用都没有

    就是一个规范

    剩下什么都不是

    按照开头视频教程的内容所说,opengl本身是一套图形规范,是为程序员访问GPU提供接口的规范——但就是规范,它不是库(动态也不是静态也不是),不是源文件,更不是程序

    有人说“啊那不对啊,不是有个opengl32.dll在系统里放着呢”然后是不是应该连一连这个东西之后搞出一点事来——但是opengl真的只是一个规范,那个dll我也不知道是干什么的,而且后续的程序中并不会用到那个dll

(又有人说“啊不用那个dll是不是因为你根本不会用动态库”是的对没错我不会用)

〇、读一读opengl官网

  opengl的官网给出一点使用信息

官网截图

    第一步是下载opengl但是千万不要误会也千万不要下什么东西,那里面是告诉你要去下GPU驱动,也就是说opengl实际上是由显卡厂商完成并且写在驱动程序上的——如果电脑没出过什么问题驱动程序应该是正常的,不然的话请找一找修复驱动程序的方法,这里不再赘述

   

     然后是写opengl程序,本篇文章的恶梦由此开始

    稍微读一读,反正我是云里雾里:大致上说,你想写一个opengl程序,首先要初始化initialize你的opengl,而初始化这一过程分两段,第一段是获取上下文context,第二段是获取函数

    (有关这个的详细内容强烈推荐开头的视频教程,我觉得讲的很清楚)

    先看第一段,官网上也给出了相应的解决方案:

If you are using the C/C++ language binding for OpenGL, then you are strongly advised to use a window toolkit for managing this task. These libraries create a window, attach an OpenGL context to this window, and manage basic input for that window. Once you are comfortable with OpenGL, you can then start learning how to do this manually.

    官网甩锅了,让你用一些工具window toolkit来干这件事。虽然他也会告诉你如何自己动手做,但还是疯狂安利你用现有的工具window toolkit。看第一句话后面的代词,官网是这么称呼那些工具的:These libraries——就是libraries啊!虽然这是事后才发觉的事情,但还是姑且记录一下,原来官网说的都是真的,那些工具真的都是库library,也就是程序员可以调用的东西

    既然官网都不惜疯狂安利了,那也没有不用的理由,点开window toolkit

   这是推荐吗,这不劝退吗

   看标题是Context/Window Toolkit,下面三大列,背景颜色较深:

第一列“创建并管理opengl窗口,多少管点用户输入,但也没管多少” 

第二列“多媒体程序库,可以整opengl窗口,还可以整输入,还可以整声音,还可以整别的像游戏之类的应用”

第三列 “人家专心当个widget,opengl属于副业”

每一列下面都有好几个工具(都应该是程序库)链接,这里选GLFW

(每次看别人的教程时遇到选择都会很痛心,啊为什么跟我选的不一样!之类的,如果你有同样的想法的话——对不起我偷懒了对不起)

一、下载GLFW

    点开GLFW官网长这样

    它是个开源库,直接下下的是源码,这里跳到下载界面找二进制

    按照开头视频教程里所说,下载32位还是64位并不是看操作系统,而是看要写的程序是32位还是64位,即编译器是哪种(笔者CLion用的是MinGW 64位)

    下完之后文件长这样

二、CLion添加程序库

    vs当然好,它太好了以至于教程很多而且很简单,就连开头的视频教程也用vs,真的很方便

    用CLion属于明知山有虎偏向虎山行

    用CLion的第一件事是创建新项目,推荐不要命名成opengl(在python里这个习惯会吃大亏)最终目的是让这个项目能开出一个窗口,但手里现在只有一个压缩包

    回到GLFW官网,进文档界面

实例源码这不就来了

    复制粘贴之后一堆红线,毕竟现在CLion连GLFW是什么东西都不知道

    为了示例程序能跑起来,首先解决include的问题——库在CLion项目里并不是在一个includes文件夹里就能识别,需要用CMakeList

(我从小到大写C++就没遇到过这种东西)

在CLion帮助里有简明CMake教程

照葫芦画瓢(先复制include文件)

这个时候主程序里红线一条没少!这是因为添加的目录是includes/GLFW,而主程序里#include的是<GLFW/glfw3.h>,实际上includes/GLFW这个文件夹里的确没有GLFW这个文件,因此改正方法有两种,这里不再赘述

改完之后红线应该没了(因为所有函数的声明都连起来了),但是运行时会报错

undefined reference to `glfwInit' 以及各种undefined reference to ~~~

三、CLion添加静态链接库

    从GLFW官网上可是下了一整个压缩包,到现在为止只用了其中的一个include(内容全部复制到includes里了),报错情有可原

    笔者MinGW 64位编译器,能用的库应该是下面这三个

一个dll,一个a,一个dll.a,

用a

(“啊你是不是不会用动态库”是的对没错我不会用)

dll.a虽然文件名里有dll,但好歹是个a(静态库),但是先只用一个,如果不行再过来添加也不迟

简单更好不是么

CLion添加库就在刚才提到的CMake简明教程下面,但是官方的教程是自己编写了一个静态库之后链接到项目中,而本地的实际需要是连接已有的库,对于喜喜呃问题姑且记录:

(笔者直接把lib-mingw-w64文件夹复制到项目根目录下,然后把*dll以及*dll.a都删了)

按照官网的葫芦,添加静态库一共两件事,第一find_library,第二target_link_libraries,都是用cmake的语法,具体可以到cmake官网上找详细文档,这里只是简单说用到的参数:

find_library:第一个参数为标识符,GLFW也好GLFWWWW也好,

                     第二个参数为库名称,最好写原名称不带后缀名

                    第三个参数为搜索目录

target_link_libraries:第一个参数为项目目标(暂时理解成可执行文件)的名称

                                  第二个参数就别管了,全大写还有高亮

                                  第三个参数是库的全部路径,而这里使用了${}是使用了上面的标识符

                                  看到这第三个参数应该就知道可以直接把路径输进去,省去find_library一步,但是那个代码不是很友好

之后再运行主程序,虽然仍然报错,但是内容少了很多

undefined reference to `__imp_glClear'以及各种undefined reference to `__imp_~~~'

四、CLion决战Opengl32.lib

    链接静态库都好说,在vs教程里添加静态库的时候还会随手添加一个opengl32.lib的库,真的是随手因为vs只要填一个表格就好了——但是CLion不是,就像刚才看到的,要写cmakelist

    搜一下刚才的报错信息,在微软有这个

    基本可以断定缺的就是opengl32.lib

    按照刚才的方式直接写一遍,毕竟vs里面不就是两个库在同一个地方添加的么,

当然不行因为这个项目里没有opengl32.lib这个文件

    “啊那为什么vs就直接加了CLion就不行”我也不知道vs为什么就能直接加了(也许跟编译器MVSC有关?还请各位读者不吝赐教)

    好了现在知道vs方便了

    下一个vs,最好装一下C++桌面开发的负载

(明明是CLion却要下一个vs,这简直无理取闹,然而实际上vs不只有IDE,还有很多用于windows系统开发的工具,就算不用它的IDE也要用它的环境的情况也有吧——但是opengl32.lib这种工具笔者并不清楚是否为windows系统自带,如果真的是自带的话还请不吝指出,笔者将在第一时间更正文章内容)

    之后还请到文件夹窗口搜索(!)opengl32.lib(!!)

    可以的话应该可以在巨量的文件中找到4个opengl32.lib(如果刚才搜索的时候没加后缀名应该还有更多的opengl32.dll)

    笔者的情况,它们分别在C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um下的四个文件夹里

文件夹名称对应CPU种类

    因此笔者x64的处理器因此选择x64下的opengl32.lib,然后复制到项目的lib文件夹里,像刚才链接glfw3.lib一样链接一遍opengl32.lib

窗口应该是有了

五、后日谈

    实际上笔者并不能确定这样强行从系统文件夹里复制lib文件到项目中是否正确,但是的确解决了困扰笔者很长时间的CLion配置opengl环境的问题,在简单图形的绘制中并没有出现不妥

但是之后的程序能否出现故障仍是未知

    解决CLion下的opengl环境的关键步骤是找到opengl32.lib并连接到项目中,而在vs中这是一件十分简单的事情——“啊那你为什么不用vs”啊我都写这么多了那你为什么不用CLion

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值