
Introduction to Computer Graphics Online Textbook (2018) - jasim
http://math.hws.edu/graphicsbook/index.html
======
phendrenad2
I think that there's a disconnect between academia and industry in the field
of computer graphics. This is probably because professors usually mistake
profusion for broadness. You can spend one chapter each on:

HSV colors | Bezier and NURBS curves | Vector (font) scaling/rotating/etc. |
Scene graphs | OpenGL lines API | OpenGL rectangles API | OpenGL texturing API
| OpenGL rotation API | OpenGL colors API | GLUT (busywork to get 3D graphics
on the screen) | JOGL (busywork to get 3D graphics on the screen) | SVG file
format | 3D Model/View/Projection matrices | linear algebra | Lighting (from
an OpenGL 1.0 perspective, which misses a lot of lighting theory) | OpenGL
material API | OpenGL MipMaps API | More scenegraph, this time with camera and
lights | How to do a bunch of stuff you already learned, this time in Three.JS
instead of OpenGL | How to do meshes, in Three.JS instead of OpenGL | How to
do fixed-function shadows, this time in Three.JS instead of OpenGL | The
programmable pipeline (finally) | WebGL busywork to get something on the
screen | GLSL syntax | texture units | 2D transforms, this time in GLSL
instead of fixed-function | Lighting in GLSL | Textures in GLSL | Multiple
framebuffers | deferred shading | ray tracing | path tracing

and feel as though you've taught a lot of stuff, but in reality it's not a
honest simplification of later graphics knowledge.

I think that a better approach would be (1) Explain 3D math, linear algebra,
etc. (2) Explain raytracing algorithms, show the student some simple
raytracing code (3) Explain the basics of modern GPU-based rendering (4) Show
the student some simple software-based raster rendering, which mimics what the
GPU does (5) Explain the shader pipeline (6) Using WebGL (no need to teach
three.js and OpenGL 1.0 also!), show the student all the various principles of
3D graphics, going into theory when appropriate.

Scenegraph? That's irrelevant. GLSL syntax? We don't need a comprehensive
explanation, the documentation already does a better job than we would. We
just need to cover enough to let them know what's possible. HSV color? Bezier
curves? MipMaps? OpenGL 1.0 API in gory brutal detail? GLUT? JOGL? Those
deserve a mention but not an entire section.

~~~
Animats
Much of that is mostly of historical interest. Today, either you're using the
scene graph of some game engine, or you're down at the Vulkan and shader
level, working on the engine and programming the GPU. A theoretical
understanding of the whole pipeline is helpful for both, but how much of the
old mechanics should be taught is a question.

WebGL is easy for students to start with, since all you need is a browser.
It's not really used much on the Web; most of the good demos are over 5 years
old. Despite that, it's probably worth teaching WebGL simply because students
can use it to get something they can show to others.

Here's the Utah teapot in WebGL: [1] Udacity uses that example. Once students
understand how that works, they probably know enough unless they intend to do
game engine development.

[1]
[http://www.realtimerendering.com/teapot/](http://www.realtimerendering.com/teapot/)

------
thefragen
I highly recommend this wikibook on the topic of CG progamming:
[https://en.wikibooks.org/wiki/Cg_Programming](https://en.wikibooks.org/wiki/Cg_Programming)

~~~
pengaru
Aren't you conflating the field of computer graphics programming with the Cg
programming language?

~~~
djmips
If you take a glance at the linked document, as I just did, it appears to
cover the hardware graphics pipeline which is more than just a Cg programming
language reference. Cg as a language is more or less the same as any other
high level shader language of the same era.

~~~
pengaru
I did look at the linked document and poked around, it was all Cg (the
programming language) centric. Which obviously overlaps substantially with
computer graphics, but isn't what I'd consider an ideal introduction to the
field unless the goal is to work with the Cg language.

------
jpm48
Wow OpenGL 1.1 in 2018! then to Three.js which doesn't use any of the 1.1 API.
Weird.

~~~
cellularmitosis
“However, modern OpenGL in its pure form has a very steep initial learning
curve, and it is really not a good starting place for someone who is
encountering 3D graphics for the first time.“

~~~
Reelin
Just imagine what would happen if you tried to start a newcomer with Vulkan.
([http://sol.gfxile.net/temp/hellotriangle.png](http://sol.gfxile.net/temp/hellotriangle.png))

------
banachtarski
I would not recommend this to aspiring graphics engineers today. There is far
too much here that is completely disjoint from how computer graphics is done
pretty much everywhere (CAD industry, games, film, etc).

~~~
Kilonzus
What text would you recommend to aspiring graphics engineers?

~~~
banachtarski
I'm very partial to "Real Time Rendering"!

------
odyssey7
Chapter 2, Section 7: “SVG: A Scene Description Language,” looks interesting.

