《OpenGL编程指南(原书第9版)》——1.3 OpenGL语法

1.3 OpenGL语法

正如你可能已经了解的,OpenGL库中所有的函数都会以字符“gl”作为前缀,然后是一个或者多个大写字母开头的词组,以此来命名一个完整的函数(例如glBindVertexArray())。OpenGL的所有函数都是这种格式。在上面的程序中你还看到了以“glfw”开头的函数,它们来自第三方库GLFW,这是一个抽象化窗口管理和其他系统任务的开发库。与之类似,你也会看到某个名为gl3wInit()的函数,它来自于第三方库GL3W。附录A会进一步讲解这两个库的内容。
与函数命名约定类似,OpenGL库中定义的常量采用GL_COLOR的形式,如display()函数中所示。所有的常量都以GL_作为前缀,并且使用下划线来分隔单词。这些常量的定义是通过#def?ines来完成的,它们基本上都可以在OpenGL的头文件glcorearb.h和glext.h中找到。
为了能够方便地在不同的操作系统之间移植OpenGL程序,OpenGL还为函数定义了不同的数据类型,例如GLf?loat是浮点数类型,在例1.1中用它来声明vertices数组。此外,由于OpenGL是一个C语言形式的库,因此它不能使用函数的重载来处理不同类型的数据,此时它使用函数名称的细微变化来管理实现同一类功能的函数集。举例来说,我们会在第2章遇到一个名为glUniform()的函数,它有多种变化形式,例如glUniform2f()和glUniform3fv()。在函数名称的“核心”部分之后,我们通过后缀的变化来提示函数应当传入的参数。例如,glUniform2f()中的“2”表示这个函数需要传入2个参数值(由于还可能会传入其他的参数,因此一共定义了24种不同的glUniform()函数—在本书中,我们使用glUniform()来统一表示所有glUniform*()函数的集合)。我们还要注意“2”之后的“f”。这个字符表示这两个参数都是GLf?loat类型的。最后,有些类型的函数名称末尾会有一个“v”,它是vector的缩写,即表示我们需要用一个一维的GLf?loat数组来传入2个浮点数值(对于glUniform2fv()而言),而不是两个独立的参数值。
表1-1所示为所有可以作为后缀的字母,以及它们所对应的数据类型。

使用C语言的数据类型来直接表示OpenGL数据类型时,因为OpenGL自身的实现不同,可能会造成类型不匹配。如果直接在应用程序中使用OpenGL定义的数据类型,那么当需要在不同的OpenGL实现之间移植自己的代码时,就不会产生数据类型不匹配的问题了。

时间: 2024-09-14 06:57:29

《OpenGL编程指南(原书第9版)》——1.3 OpenGL语法的相关文章

《OpenGL编程指南》一1.1 什么是OpenGL

1.1 什么是OpenGL OpenGL是一种应用程序编程接口(Application Programming Interface, API),它是一种可以对图形硬件设备特性进行访问的软件库.OpenGL库的4.3版本(即本书所使用的版本)包含了超过500个不同的命令,可以用于设置所需的对象.图像和操作,以便开发交互式的3维计算机图形应用程序. OpenGL被设计为一个现代化的.硬件无关的接口,因此我们可以在不考虑计算机操作系统或窗口系统的前提下,在多种不同的图形硬件系统上,或者完全通过软件的方

《opengl编程指南》第八版 例题都不能编译运行

问题描述 <opengl编程指南>第八版 例题都不能编译运行 所有例题都出现下面这几个错误.好像是库的问题,但不知道那个库,该怎么办 解决方案 1>------ 已启动生成: 项目: Triangles, 配置: Debug Win32 ------ 1>freeglut_static_vs2010_d.lib(freeglut_init.obj) : error LNK2019: 无法解析的外部符号 sscanf,该符号在函数 _glutInit 中被引用 1>freegl

《JavaScript和jQuery实战手册(原书第3版)》---第1章 编写第一个JavaScript程序 1.1 编程简介

本节书摘来自华章出版社<JavaScript和jQuery实战手册(原书第3版)>一书中的第1章,第1.1节,作者David Sawyer McFarland,姚待艳 李占宣 译,更多章节内容可以访问"华章计算机"公众号查看. 第1章 编写第一个JavaScript程序 HTML自身并没有太多智能:它不能做数学运算,不能判断某人是否正确填写了一个表单,而且不能根据Web访问者的交互来做出判断.基本上,HTML让人们阅读文本.观看图片或视频,并且单击链接转向拥有更多文本.图片

《面向对象的思考过程(原书第4版)》一1.3 过程式编程与面向对象编程

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.3节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 1.3 过程式编程与面向对象编程 在我们深入了解面向对象开发的优势之前,先考虑一个更基本的问题:究竟什么是对象?这既是一个复杂的问题,也是一个简单的问题.它复杂是因为学习任何一种软件开发方法论都非易事.它简单是因为人们已经在按对象的方式进行思考.例如,当你看到一个人,你会把他

ROS机器人程序设计(原书第2版).

机器人设计与制作系列 ROS机器人程序设计 (原书第2版) Learning ROS for Robotics Programming,Second Edition 恩里克·费尔南德斯(Enrique Fernández) 路易斯·桑切斯·克雷斯波(Luis Sánchez Crespo) 阿尼尔·马哈塔尼(Anil Mahtani) 亚伦·马丁内斯(Aaron Martinez) 著 刘锦涛 张瑞雷 等译 图书在版编目(CIP)数据 ROS机器人程序设计(原书第2版) / (西)恩里克·费尔南

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

《机器学习与R语言(原书第2版)》一1.5 使用R进行机器学习

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.5节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.5 使用R进行机器学习 机器学习所需要的很多算法都没有包含在R的基本安装中.但一个很大社区的专家免费分享他们的机器学习成果,机器学习所需要的算法就是通过这种方式得到.这些必须通过手动方式安装在R基础安装包之上.多亏R是免费的开源软件,没有为这种功能额外收费.那些能在用

《面向对象的思考过程(原书第4版)》一1.2 对象及遗留系统

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.2节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著 1.2 对象及遗留系统 在面向对象成为主流之前,开发人员面临的问题一直就是如何将新的面向对象技术与现有的系统集成起来.面向对象与结构化(或命令式)编程之间拥有明显的界限,而结构化编程当时则是主流的开发范式.而我始终反对面向对象和结构化编程是不兼容的这一观点,因为我认为面向对象与结构化编程绝不是互斥的.它们是互补的,因为对象可以与结构化代码很好地集成.

《面向对象的思考过程(原书第4版)》一3.6 对象操作

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第3章,第3.6节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 3.6 对象操作 当处理复杂的数据结构和对象时,编程中的很多最基本的操作会变得越来越复杂.例如,当你想复制或比较原始数据类型时,过程非常简单.然而,复制和比较对象则并不简单.<Effective C++>第34页中,Scott Meyers专门花了整个小节来讲述复