Content Introduction Opengl Programming
Content Introduction Opengl Programming
Content Introduction Opengl Programming
Search
207
OpenGL is a well-known standard for generating 3-D as well as 2-D graphics that is
extremely powerful and has many capabilities. OpenGL is defined and released by
the OpenGL Architecture Review Board (ARB).
This article is a gentle introduction to OpenGL that will help you understand drawing
using OpenGL.
The latest version of OpenGL at the time of this writing is 4.4, which uses a different
technique for drawing from the one presented here. Nevertheless, the purpose of this
article is to help you understand OpenGL philosophy, not teach you how to code using
the latest OpenGL version. Therefore, the presented source code can be run on Linux
machines that have an older OpenGL version installed.
Installing OpenGL
TRENDING TOPICS
SysAdmin
DevOps
Security
Cloud
If you run the following command on a Debian 7 system to find all packages that
open in browser PRO version
pdfcrowd.com
If you run the following command on a Debian 7 system to find all packages that
contain the word "opengl", you'll get plenty of output (Figure 1):
HPC
Mobile
Virtualization
Web Development
Popular
Recent Comments
New Products
Android Candy: Google Keep
Handling the workloads of the Future
Raspi-Sump
diff -u: What's New in Kernel
Development
Non-Linux FOSS: Don't Type All
Those Words!
Dec
Dec
Dec
Dec
22,
19,
18,
16,
2014
2014
2014
2014
RELATED JOBS
Linux Unix Systems Architect
Request Technology-Craig Jo...
Northbrook, IL
Senior Linux and Unix Platform Architect
Request Technology-Anthony ...
Northbrook, IL
IT Manager Linux/Windows Server Lifec...
Request Technology-Robyn Ho...
Hudson, OH
pdfcrowd.com
Jeff Parent
Brad Baillio
Nick Baronian
Steve Case
Chadalavada Kalyana
Caleb Cullen
Keir Davis
Michael Eager
Nick Faltys
Dennis Frey
Philip Jacob
Jay Kruizenga
Steve Marquez
Dave McAllister
Craig Oda
Mike Roberts
Chris Stark
Patrick Swartz
David Lynch
Alicia Gibb
Thomas Quinlan
Carson McDonald
Kristen Shoemaker
Charnell Luchich
James Walker
Victor Gregorio
Hari Boukis
Brian Conner
David Lane
pdfcrowd.com
glxinfo command:
# apt-get install mesa-utils
The glxinfo command displays useful information about your OpenGL installation, as
you can see in the following output:
Already a subscriber? Click here for subscriber services.
...
GLX version: 1.4
GLX extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_MESA_copy_sub_buffer, GLX_MESA_multithread_makecurrent,
GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_make_current_read
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe
(LLVM 3.4, 128 bits)
OpenGL version string: 2.1 Mesa 10.1.3
OpenGL shading language version string: 1.30
OpenGL extensions:
...
Mesa is a 3-D graphics library with an API that is so very similar to OpenGL's, it is
pretty much indistinguishable.
OpenGL Pipeline
Figure 2taken from the OpenGL Shading Language book (aka "The Orange Book")
shows the programmable OpenGL pipeline with the vertex and fragment
processors. As you can imagine, the OpenGL pipeline is complex, but you do not have
to understand it fully in order to be able to use OpenGL. The Pipeline shows how
OpenGL operates in the background. Newer versions of the OpenGL Pipeline are
open in browser PRO version
pdfcrowd.com
pdfcrowd.com
Drawing a Triangle
Now it's time for some real OpenGL code. The code in Listing 1, when executed,
draws a triangle on-screen using OpenGL.
Listing 1. triangle.cc
// Programmer: Mihalis Tsoukalos
// Date: Wednesday 04 June 2014
//
// A simple OpenGL program that draws a triangle.
#include "GL/freeglut.h"
#include "GL/gl.h"
void drawTriangle()
{
glClearColor(0.4, 0.4, 0.4, 0.4);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glBegin(GL_TRIANGLES);
glVertex3f(-0.7, 0.7, 0);
glVertex3f(0.7, 0.7, 0);
glVertex3f(0, -1, 0);
glEnd();
glFlush();
}
int main(int argc, char **argv)
{
pdfcrowd.com
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL - Creating a triangle");
glutDisplayFunc(drawTriangle);
glutMainLoop();
return 0;
}
The code in Listing 1 for setting up OpenGL is large, but you will have to learn it only
once.
On a Debian 7 system, the following command compiled the triangle.cc OpenGL
program without any error messages:
$ g++ triangle.cc -lglut -o triangle
On an Ubuntu Linux system, the same command produced the following error
messages:
/usr/bin/ld: /tmp/ccnBP5li.o: undefined reference to symbol
↪'glOrtho'
//usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: error adding
//symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
pdfcrowd.com
The libGL.so library accepts OpenGL commands and makes sure that they are put on
the screen in some way. If your graphics card does not have 3-D acceleration, libGL
contains a software renderer that gives a 2-D image as output to the X Window
System. This is the case with Mesa. libGL also can pass the OpenGL information to
the X Window System, if the GLX extension is present. Then, the X Window System
can do software rendering with the help of Mesa or use hardware acceleration.
The output from the executable will produce the triangle shown in Figure 3. The
correct compilation of triangle.cc is proof that your Linux system can be used for
developing OpenGL applications.
pdfcrowd.com
next
last
______________________
Login to save this as favorite
4 Comments
Linux Journal
Sort by Best
a month ago
pdfcrowd.com
What's with the gratuitous shot of Mac OS terminal? we in the Linux community work hard building and maintaining
our own OS, and unlike Apple we have basically no advertising budget, so maybe highlighting Linux would serve the
community more than free nudges and winks to Apple.
8
Reply Share
Shahbaz Youssefi
a month ago
Reply Share
a month ago
Reply Share
a month ago
I've found that you have to add the -lGLU flag to compile this in Ubuntu 13.04. Hope that helps.
Subscribe
Reply Share
Privacy
pdfcrowd.com
Webinar
More Resources
Webinar
More Resources
pdfcrowd.com
First Name
Last Name
Address 1
Address 2
City
State
Zip
Digital Edition
Magazine Formats
The Store
About Us
The Site
Subscribe/Renew
Pay My Bill
Customer Service
Digital Downloads
Gift Subscriptions
PC/Mac
Android
iPhone/iPad
EPUB
Kindle
Stickers
T-shirts
Posters
Back Issues
Archive CD
Advertise
Author Info
Write a Letter
FAQ
Masthead
Copyright
RSS Feeds
Privacy Policy
Events
Contact Us
pdfcrowd.com