一、opengl在哪学?
(一)在qt中学习,qt对opengl和valkan有很大的支持力度,opengl的支持的两个关键类QOpenGLWidget,QOpenGLFuctions
(二)在openGL官网
(三)自己买书
(四)站在巨人的肩膀上学习,百度,bilibili学习网(手动狗头)
二、openGL关键概念
(一)、百度搜索opengl关键概念,先从概念入手
1、知乎上这篇文件非常好,推荐看
https://zhuanlan.zhihu.com/p/56693625
2、opengl(open graphics library),跨平台的图形API,可以绘制2D/3D图形
opengl ES(opengl for embeded system),opengl的嵌入式版本,剔除了低性能的部分
opengl es 3.0,目前覆盖率最广的opengl版本
3、opengl上下文Context
是一个巨大的状态机(有限状态机和无限状态机的概念,可以提起去了解下,qt内部也有状态机类,学习下框架)
执行指令的基础就是这个Context
3、帧缓冲区FrameBuffer
opengl里面的画板,它并不是我们理解上常见的存储数据的缓冲区,真正存储数据的是Texture(纹理)和RenderBuffer(渲染缓冲区)
纹理和渲染缓冲区可以理解为画布。在FrameBuffer上放置画布的区域称为附着(attachment)
4、附着Attachment
有三种附着,颜色附着ColorAttachment,深度附着depthAttachment,模板附着StecilAttachment。颜色附着,输出绘制图形的颜色
数据,深度附着,输出绘制图像的深度数据,可以把深度理解为图形的远近。模板附着,输出绘制图像的模板数据,此处理解不透彻,
但是按照这位博主说的,一般用于进行像素级别的剔除和遮挡,如3D图像的描边
5、纹理Texture和RenderBuffer的关系
纹理一般带有3d图像,支持1d,2d,3d图像,而渲染缓冲区,支持2D图像。纹理和渲染缓冲区不能同时挂载到帧缓冲区。
6、顶点数组(VertexArray)和顶点缓冲区(VertexBuffer)
准备好画板、附着、画布之后,就开始绘制图像了。绘制图像,先绘制图像的骨架,vertexArray就是图像的骨架,OpenGL ES的图像数据,
7、索引数组ElementArray和索引缓冲区
这两个同顶点数组和顶点缓冲区的功能是相同的,都是存储数据用的。OpenGL绘制时,提供了glDrawArrays和glDrawElements函数就是
分别来操作顶点数组和索引数组
8、渲染管线的概念
理解为从数据到显示器上的图像必须经过的阶段。一般会包含各种坐标转换(自身坐标、世界坐标、视口(屏幕)坐标)、光栅化(计算三角形每个点的
颜色值)、图元(使用顶点数据、索引数据绘制出来的点、线、三角形)、光栅化处理(坐标到图形,3D到2D)、投影(虚拟摄像机将3D图形投影
到2D的画布上,OpenGL是个3维图形库)
关于上面的渲染管线的概念,csdn上面这位博主的博客说的很好,推荐看
https://blog.youkuaiyun.com/qq_43801020/article/details/106926996
9、着色器程序Shader
这部分没怎么看懂,还是建议直接看大佬的博客吧。我的理解是着色器程序就是可编程固定渲染管线。OPenGl ES 3.0支持顶点着色器和片段着色器。
未完待续。。。 以上就是自己概念的学习,希望天天向上
三、下一阶段计划
1、在qt中使用opengl和理解官方的几个demo的使用
四、最后感谢这两篇文章
1、https://zhuanlan.zhihu.com/p/56693625
2、https://blog.youkuaiyun.com/qq_43801020/article/details/106926996
小白学习opengl,第一天
最新推荐文章于 2024-12-09 17:29:37 发布