博客
关于我
现代3D图形编程学习-基础简介(3)-什么是opengl (译)
阅读量:428 次
发布时间:2019-03-06

本文共 1949 字,大约阅读时间需要 6 分钟。

OpenGL是什么

在编写OpenGL程序之前,我们首先需要了解OpenGL是什么。OpenGL是一种应用程序接口(API),它定义了用于渲染3D图形的函数和数据结构。虽然不同的语言对OpenGL的实现可能有所不同,但它们都基于C语言的接口。

在C语言的API中,OpenGL定义了许多typedefs#define和函数。这些定义了OpenGL中使用的基本数据类型,如GLintGLfloat。复杂的数据结构,如struct,通常被隐藏在API背后,以便允许对非C语言的实现进行调整。

与直接在C++中定义结构体不同,OpenGL采用API方式实现对象管理。例如,创建一个对象并赋予其属性,可以通过以下步骤实现:

GLuint objectName;
glGenObject(1, &objectName);
glBindObject(GL_MODIFY, objectName);
glObjectParameteri(GL_MODIFY, GL_OBJECT_COUNT, 5);
glObjectParameteri(GL_MODIFY, GL_OBJECT_OPACITY, 0.4f);
glObjectParameteri(GL_MODIFY, GL_OBJECT_NAME, "Some String");

需要注意的是,这些代码示例并不是实际的OpenGL命令,只是用来说明如何通过API创建和赋值对象。OpenGL自身管理所有对象的存储空间,因此用户只能通过引用(如GLuint)来访问对象。

OpenGL的结构

OpenGL的API是一个状态机,几乎所有函数都用于设置或获取状态。这些状态共同构成了一个大型数据结构——OpenGL上下文(OpenGL_Context)。上下文中的每个属性都包含了渲染所需的信息。

通过绑定对象到上下文的目标位置,可以将对象的属性替换到上下文中。例如:

struct Values {
int iValue1;
int iValue2;
};
struct OpenGL_Context {
Values *pMainValues;
Values *pOtherValues;
};
OpenGL_Context context;

创建一个Values对象后,需要通过glGenValues函数生成并绑定到上下文的目标位置,如GL_MAIN_VALUESGL_OTHER_VALUES。通过glBindValues函数将对象绑定到目标上,然后使用glValueParam函数设置对象的特定参数。

OpenGL规范

从技术角度看,OpenGL并不是一个API,而是一个规范。这个规范定义了初始化状态以及每个函数如何改变或获取状态。当调用渲染函数时,状态的组合决定了最终的渲染结果。

这个规范由OpenGL架构审查委员会( Khronos Group 的一部分)撰写,包括苹果、NVIDIA、AMD等公司。规范的主要目的是确保不同硬件实现的结果一致,而不是具体实现方式。

OpenGL版本

OpenGL已经有多个版本,且版本之间的代码通常是向后兼容的。从OpenGL 3.0开始,核心API逐步减少不必要的函数,并将规范分为核心和扩展部分。然而,大多数硬件实现仍然支持老接口,确保向后兼容。

术语解释

  • 向量:由带顺序的数值组成的值,具有维度属性。
  • 标量:单个非向量数值,或视为1维向量。
  • 位置向量:表示点的向量。
  • 方向向量:表示方向的向量。
  • 向量成分:向量中的每一个值。
  • 面向向量各成分的操作:操作仅对向量各成分进行,输出向量维度与输入相同。
  • 单位向量:长度为1的向量,是纯粹的方向向量。
  • 向量标准化:将向量变成单位向量。
  • 像素:数字图像的最小单位。
  • 图像:二维像素数组。
  • 渲染:将3D世界投射到2D图像的过程。
  • 光栅化:将3D三角形转换为2D图像的方法。
  • 几何体、模型、网格:由三角形组成的3D物体。
  • 顶点:3D空间中组成三角形的点。
  • 裁剪空间、裁剪坐标:包括第四个维度w的三维空间。
  • 裁剪:处理顶点是否在可见区域内。
  • 标准化设备坐标:裁剪坐标系中的点除以w后的结果。
  • 窗口空间、窗口坐标:标准化设备坐标映射到屏幕坐标。
  • 扫描转换:将三角形投射到像素位置。
  • 采样:判断像素边界的片段是否需要生成。
  • 片段:扫描转换后的三角形元素。
  • 不变性保证:输入和输出具有相同性质。
  • 颜色空间:定义颜色的集合。
  • 着色程序:渲染器执行的用户定义程序。
  • 着色器:渲染管线中的执行位置。
  • OpenGL上下文:渲染参数的特殊集合。
  • 对象绑定:将对象属性替换到上下文的目标位置。
  • OpenGL实现:针对不同系统的OpenGL软件实现。

转载地址:http://dfvuz.baihongyu.com/

你可能感兴趣的文章
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>
Nmap扫描教程之Nmap基础知识
查看>>