博客
关于我
现代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/

你可能感兴趣的文章
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
NO.23 ZenTaoPHP目录结构
查看>>
no1
查看>>
NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
查看>>
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>
Node JS: < 一> 初识Node JS
查看>>
Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
查看>>
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>