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

本文共 1936 字,大约阅读时间需要 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/

你可能感兴趣的文章
np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
查看>>
np.power的使用
查看>>
NPM 2FA双重认证的设置方法
查看>>
npm build报错Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘解决方法
查看>>
npm build报错Cannot find module ‘webpack‘解决方法
查看>>
npm ERR! ERESOLVE could not resolve报错
查看>>
npm ERR! fatal: unable to connect to github.com:
查看>>
npm ERR! Unexpected end of JSON input while parsing near '...on":"0.10.3","direc to'
查看>>
npm ERR! Unexpected end of JSON input while parsing near ‘...“:“^1.2.0“,“vue-html-‘ npm ERR! A comp
查看>>
npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
查看>>
npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
查看>>
npm install CERT_HAS_EXPIRED解决方法
查看>>
npm install digital envelope routines::unsupported解决方法
查看>>
npm install 卡着不动的解决方法
查看>>
npm install 报错 EEXIST File exists 的解决方法
查看>>
npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
查看>>
npm install 报错 Failed to connect to github.com port 443 的解决方法
查看>>
npm install 报错 fatal: unable to connect to github.com 的解决方法
查看>>
npm install 报错 no such file or directory 的解决方法
查看>>
npm install 权限问题
查看>>