网站首页 > 技术教程 正文
opengl 概述
opengl是由khronos组织维护制定的一个规范,它并不是一个库或者api,它的具体实现是由显卡厂商完成的。
opengl规范描述了绘制2D和3D图形的抽象api。
opengl规范规定了它的每个函数如何执行,以及它们的输出值,内部实现则是由opengl的开发者自行决定,通常是显卡厂商。opengl规范并没有规定实现的细节,所以不同显卡厂商的opengl有不同的实现,但其功能和结果是相匹配的。
这是opengl3.3的规范文档(
https://www.khronos.org/registry/OpenGL/specs/gl/glspec33.core.pdf)
opengl的渲染模式
现代opengl(opengl3.3以后的版本)使用的是核心模式(core-profile)。早期版本使用的是立即渲染模式,也叫做固定渲染管线,而现代opengl是可编程渲染管线。
opengl的立即模式,隐藏了很多细节,绘图很方便,例如绘制一个三角形:
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(0.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f(0.87f, -0.5f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f(-0.87f, -0.5f);
glEnd();
立即渲染模式下,只需要设置绘制的形状,指定顶点颜色,传入顶点即可。
而核心模式则看起来是这样的:
float vertices = { /*sth*/ };
unsigned int vao;
//生成一个vao对象
glGenVertexArrays(1, &vao);
//绑定vao到opengl上下文
glBindVertexArray(vao);
unsigned int vbo;
//生成一个vbo对象
glGenBuffers(1, &vbo);
//绑定vbo到opengl上下文
glBindBuffer(GL_ARRAY_BUFFER, vbo);
//把vertices里面的数据放到vbo里
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
可以看到,核心模式要比立即渲染模式更加复杂。
opengl 状态机
opengl自身是一个状态机,opengl的状态被叫做opengl上下文。例如上面的glBind函数就是改变了opengl的状态。
opengl 对象
opengl的对象可以看作一个结构体,对象被创建时,我们通过一个id来保存它的引用,接下来使用的时候,我们把这个对象绑定到opengl上下文的目标位置,例如上面例子的GL_ARRAY_BUFFER。之后对这个对象的设置,都会保存到这个对象里。
猜你喜欢
- 2025-03-19 一看就懂的OpenGL ES教程——图形渲染管线的那些事
- 2025-03-19 AMD PRO Edition 22.Q3 驱动发布,OpenGL 应用性能最高提升 72%
- 2025-03-19 C++经典图形库EasyX(c++ 图形库)
- 2025-03-19 Wine On Wayland今年目标支持OpenGL、窗口最小化等
- 2025-03-19 出工程图时SOLIDWORKS显示内存耗尽?解决办法看这里
- 2025-03-19 VMware Workstation 17.0 Pro 发布:新增 TPM 2.0 完美兼容Win11
- 2025-03-19 一看就懂的OpenGL ES教程——这或许是你遇过最难画的三角形(四)
- 2025-03-19 那些年,我们一起追过的ATI显卡(ati显卡推荐)
- 2025-03-19 比DX12和Mantle更全面 OpenGL将爆发
- 2025-03-19 SDL 彻底理解纹理(Texture)(sdl图)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)