“Rise of OpenGL” and Qt

This post describes my Internet search and findings about OpenGL and other related tools. Post contains excerpts and links from referred websites.

Graphical Kernel System (GKS)

The Graphical Kernel System (GKS) was the first ISO standard for low-level computer graphics, introduced in 1977 [0].

GKS defines a common interface to interactive computer graphics for application programs. GKS has been designed by a group of experts representing the national standards institutions of most major industrialized countries. The full standard provides functional specifications for some 200 subroutines which perform graphics input and output in a device independent way. Application programs can thus move freely between different graphics devices and different host computers. For the first time graphics programs have become genuinely portable [1].

From GKS to PHIGS

From Wikipedia page of GKS, I found that a descendant of GKS was PHIGS. I explored PHIGS and following is the useful excerpt from Wikipedia page of PHIGS:

PHIGS is an API standard for rendering 3D computer graphics, at one time considered to be the 3D graphics standard for the 1990s. Instead a combination of features and power led to the rise of OpenGL, which became the most popular professional 3D API of the 1990s [2].

PHIGS was designed in the 1980s, inheriting many of its ideas from the Graphical Kernel System of the late 1970s, and became an ANSI (ANSI X3.144-1988), FIPS (FIPS 153) and then ISO standard (ISO/IEC 9592 and ISO/IEC 9593) by 1989. Due to its early gestation, the standard supports only the most basic 3D graphics, including basic geometry and meshes, and only the basic Gouraud, “Dot”, and Phong shading for rendering scenes. Features considered standard today, notably texture mapping, were not supported, nor were many machines of the era physically capable of it (at least in real time).

But PHIGS had its own limitations and given the low performance systems of the era and the need for high-performance rendering, OpenGL was generally considered to be much more “powerful” for 3D programming. PHIGS fell into disuse [2].

Rise of OpenGL

By the early 1990s, SGI was a leader in 3D graphics for workstations. Their IRIS GL API was considered state-of-the-art and became the de facto industry standard, overshadowing the open standards-based PHIGS. This was because IRIS GL was considered easier to use, and because it supported immediate mode rendering. By contrast, PHIGS was considered difficult to use and outdated in terms of functionality [3].

IRIS GL (Integrated Raster Imaging System Graphics Library) was a proprietary graphics API created by Silicon Graphics Inc. (SGI) for producing 2D and 3D computer graphics on their IRIX-based IRIS graphical workstations. Later SGI removed their proprietary code, reworked various system calls, and released IRIS GL as the industry standard OpenGL [5].

You can read the whole history at: http://en.wikipedia.org/wiki/OpenGL#History

OpenGL

OpenGL (Open Graphics Library) is a cross-language, multi-platform API for rendering 2D and 3D computer graphics. The API is typically used to interact with a GPU, to achieve hardware-accelerated rendering. OpenGL was developed by Silicon Graphics Inc. (SGI) from 1991 and released in January 1992 and is widely used in CAD, virtual reality, scientific visualization, information visualization, flight simulation, and video games. OpenGL is managed by the non-profit technology consortium Khronos Group [3].

OS and Platform Independent

In addition to being language-independent, OpenGL is also platform-independent. The specification says nothing on the subject of obtaining, and managing, an OpenGL context, leaving this as a detail of the underlying windowing system. For the same reason, OpenGL is purely concerned with rendering, providing no APIs related to input, audio, or windowing [3].

OpenGL is supported on every major operating system, it works with every major windowing system, and it is callable from most programming languages. It offers complete independence from network protocols and topologies. All OpenGL applications produce consistent visual display results on any OpenGL API-compliant hardware, regardless of operating system or windowing system [4].

Qt

Qt it is a cross-platform application and UI framework that is widely used for developing application software with a graphical user interface (GUI), and also used for developing non-GUI programs such as command-line tools and consoles for servers. It has excellent documentation, wiki and learning videos. I would request to readers to please please please see this small video that made me fan of Qt: http://www.youtube.com/watch?v=LPMG4u5e1y8

I quote for Qt as:

Qt is like air, it is everywhere.

Integration of Qt and OpenGL (The Great Combination)

Qt provides support for integration with OpenGL implementations on all platforms, giving developers the opportunity to display hardware accelerated 3D graphics alongside a more conventional user interface [6].

Further I found Qt3D. Qt3D was created to simplify the usage of the OpenGL standard API within a Qt application. Qt3D is a set of C++ APIs for 3D programming built on top of QtOpenGL. QtOpenGL is a port of the OpenGL API to the Qt toolkit. It does a fairly good job at translating all of OpenGL basic functions to a Qt widget. Qt3D is currently available as add-on to basic Qt 5.0 package [] .

Even the essential module Qt Gui in addition to simplify the writing of OpenGL code, also contains a few math classes to aid with themost common mathematical operations related to 3D graphics.

Also from videos section of Qt website, found some very useful videos on Modern Shader based OpenGL techniques and OpenGL with Qt 5.

Moreover, there are number of APIs and glue libraries available for easy and graceful implementation of OpenGL such as following:

http://en.wikipedia.org/wiki/Coin3D
https://bitbucket.org/Coin3D/coin/wiki/MainFeatures
http://doc.coin3d.org/SoQt/
http://doc.coin3d.org/Quarter/

At the end, I can conclude that Qt + OpenGL is capable of handling today’s modern and sophisticated 3D graphics for any sort of requirement.

[0] http://en.wikipedia.org/wiki/Graphical_Kernel_System

[1] http://wwwasdoc.web.cern.ch/wwwasdoc/gks_html3/node6.html

[2] http://en.wikipedia.org/wiki/PHIGS

[3] http://en.wikipedia.org/wiki/OpenGL

[4] http://www.opengl.org/documentation/implementations/

[5] http://en.wikipedia.org/wiki/IRIS_GL

[6] http://qt-project.org/doc/qt-4.8/examples-opengl.html

[7] http://qt-project.org/wiki/Introduction-to-Qt3D