OpenGL学习笔记(1)

本文深入探讨OpenGL的本质,解释其作为规范而非API的角色,以及由Khronos组织维护的背景。文章详细介绍了OpenGL的核心模式与立即渲染模式的区别,强调了状态机的概念,以及对象在OpenGL中的作用。同时,文中提供了实例代码,展示了如何通过状态设置函数和状态使用函数来操作OpenGL上下文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

通过LearnOpenGL 学习OpenGL,下面会引用其中我认为比较重要的知识。

关于OpenGL

1.什么是OpenGL:

OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。
实际的OpenGL库的开发者通常是显卡的生产商。当产生一个bug时通常可以通过升级显卡驱动来解决。
OpenGL3.3的规范文档

2.核心模式与立即渲染模式

早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),立即渲染模式确实容易使用和理解,但是效率太低。从OpenGL3.2开始,规范文档开始废弃立即渲染模式,并鼓励开发者在OpenGL的核心模式(Core-profile)下进行开发。
现今,更高版本的OpenGL已经发布,但所有OpenGL的更高的版本都是在3.3的基础上,只是引入了额外的功能,并没有改动核心架构。
注意:当使用新版本的OpenGL特性时,只有新一代的显卡能够支持你的应用程序。这也是为什么大多数开发者基于较低版本的OpenGL编写程序,并只提供选项启用新版本的特性。代码看上去像下面一样:

if(GL_ARB_extension_name)
{
    // 使用硬件支持的全新的现代特性
}
else
{
    // 不支持此扩展: 用旧的方式去做
}

3.状态机

OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。
假设当我们想告诉OpenGL去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL状态,从而告诉OpenGL如何去绘图。一旦我们改变了OpenGL的状态为绘制线段,下一个绘制命令就会画出线段而不是三角形。
当使用OpenGL的时候,我们会遇到一些状态设置函数(State-changing Function),这类函数将会改变上下文。以及状态使用函数(State-using Function),这类函数会根据当前OpenGL的状态执行一些操作。只要你记住OpenGL本质上是个大状态机,就能更容易理解它的大部分特性。

4.对象

在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集。可以把对象看做一个C风格的结构体(Struct)。
下面是一小段展示OpenGL常见工作流的操作:

// 创建对象
unsigned int objectId = 0;
glGenObject(1, &objectId);
// 绑定对象至上下文
glBindObject(GL_WINDOW_TARGET, objectId);
// 设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// 将上下文对象设回默认
glBindObject(GL_WINDOW_TARGET, 0);

我们首先创建一个对象,然后用一个id保存它的引用(实际数据被储存在后台)。然后我们将对象绑定至上下文的目标位置(例子中窗口对象目标的位置被定义成GL_WINDOW_TARGET)。接下来我们设置窗口的选项。最后我们将目标位置的对象id设回0,解绑这个对象。设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值