OpenGL是什么?

OpenGL是什么?

wiki:

Open Graphics Library (OpenGL) is a

,

(API) for rendering

and

.

wiki 说是API,其他人也会告诉你说是API,但是这个 API 容易产生误解。比如 Java 有个 API 叫 String.length() ,使用 Java 调用这个API能返回String 长度, 这里这个JAVA API 通常是指实现了这个接口,实际上 API 有两层含义,一层是指定义,二层是指实现。具体到 Java 来说就是 Java 语言的规范 和 实现。 Java 语言的规范只有一份 ,见

, 实现可以有多种, 比如 sun 公司的 jdk 和 openjdk。

回到 OpenGL 是 API 这句话,说的是第一层含义,它是指定义了一组接口,不包含实现。一般来说我们提到 OpenGL 的时候说的都是规范的定义,不包含实现。这里有规范定义

OpenGL FAQ 解释的更清楚了:

OpenGL 是什么这个问题容易回答却不容易理解, 应该换个问法,OpenGL 为什么会出现?

和其他的规范(如 3GPP ,TCP/IP,JVM) 都一样的目的,为了统一, 在规范出现之前,各大显卡厂商各搞各的,AMD,Intel, Nvidia ,SGI ,每个厂商一套自己的 API,而且经常更新,应用开发者无法使用同一的 API 完成相同的功能,后来SGI 提出搞一套规范叫OpenGL,定义统一的API ,厂家实现,开发者调统一的API 就好了。

现在 OpenGL 是

在管了。 OpenGL 后续可能会被 Vulkan 所替代。

这个网站不错,我见过最好的学习OpenGL的,唯一的问题是它是 Windows 环境 ,哈哈哈! Windows下 好多东西是不容易搞清楚的,比如里面的 GLUT, GLFW , 还有这个IDE 花时间又不容易理解细节,比如 如何编译的,链接了那些库。

我尝试过在 Ubuntu 或其他Linux环境下搞, 下面这个里面有很多 tutorial .

但是 Linux下的OpenGL实现鲜有支持到 4 以上的,这点比较坑爹。

我自己看了http://learnopengl.com 然后在Android环境下使用native activity 来实现 ,GL部分代码基本一样,Android环境比Windows 好一些,不需要glut glfw 这些库,而且不容易出现OpenGL 版本不一致导致的问题。

一些代码在这里

几本书 你可看过:

The Red Book

OpenGL Programming Guide, 8th Edition.

A tutorial and reference book.

The Orange Book

OpenGL Shading Language, 3rd edition.

A tutorial and reference book for

.

Historic books (pre-OpenGL 2.0):

The Green Book

OpenGL Programming for the X Window System.

A book about X11 interfacing and

(GLUT).

The Blue Book

OpenGL Reference manual, 4th edition.

Essentially a hard-copy printout of the

(man) pages for OpenGL.Includes a poster-sized fold-out diagram showing the structure of an idealised OpenGL implementation