Introduction to Computer Graphics

advertisement
INTRODUCTION TO COMPUTER GRAPHICS
CS 4363/6353
WHAT YOU’LL SEE
•
Interactive 3D computer graphics
• Real-time
• 2D, but mostly 3D
• OpenGL
• C/C++ (if you don’t know them)
• The math behind the scenes
• Shaders
• Simple and not-so-simple 3D file formats (OBJ and FBX)
WHAT YOU WON’T SEE
•
Applications (though they are useful)
• Photoshop/Gimp/Paint.NET
• Maya
• Web graphics
• Art
•
Character animations
• Very complex
• Usually require 3 rd party software
WHY?
•
Senior Graphics Engineer at Autodesk – 1/6/2012
WHY?
•
C/C++ Game Programmer at Addmired – 1/5/2012
WHY?
•
Graphics Engineer at LucasArts – 1/4/2012
EARLY GRAPHICS
•
Das Blinkenlights
•
Dot matrix printers
•
Shortly after printers came the CRT…
http://james.seng.sg/files/public/starwar-ascii-art.jpg
EARLY GRAPHICS
•
The CRT was able to draw more than ASCII characters. It could draw dots!
http://www.gamasutra.com/view/feature/3900/the_history_of_pong_avoid_missing_.php
EARLY GRAPHICS
•
If you can draw a dot, you can draw a line!
•
Bresenham’s Line Drawing algorithm
http://kobi.nat.uni-magdeburg.de/patrick/uploads/BEng/bresenham_line.png
http://i18.photobucket.com/albums/b106/mspeir/Grid.jpg
THINGS TO NOTE…
•
Everything at this time
• was 2D
• Looked really bad, but was playable!
• was in real time
•
How did the “animation” work?
INTO THE 3RD DIMENSION
•
Add depth dimension
•
How do you perceive depth everyday?
• You have two eyes
• The image for your left eye is
different than the right
• Brain extracts the differences to
understand depth
•
3DTVs – how do they work?
http://static3.businessinsider.com/image/4b45f3b20000000000533ed7/3d-tv.jpg
BUT WAIT!
•
Monitors are one “flat image on a flat surface”
•
How do we perceive depth now?
• Farther objects are smaller (foreshortening)
• Subtle lighting changes
•
We’ll use mathematics to do this for us
http://www.oceansbridge.com/paintings/artists/c/canaletto/oilbig/perspective_1765_XX_venice.jpg
COMMON TERMINOLOGY
•
Rendering: the entire process of drawing an image to the screen
•
Vertex: a single 3D point (x, y, z)
•
Edge: a line between two vertices
•
Face: Most often 3 vertices and their edges
•
Transformations: moving one or more vertices
•
Translate: pushing vertices along the x, y or z axis
•
Rotate: revolving vertices around some 3D point
•
Scale: increasing or decreasing the distance of vertices from their center
•
Model matrix – a mathematical structure for holding transformations (later)
•
View matrix – another used for holding the viewpoint (camera)
•
Projection matrix – another, used to get images on the screen (later)
•
Rasterization – putting the actual pixels on the screen (final phase of rendering)
TRANSFORMATIONS
•
Translate
•
Rotate
•
Scale
TERMINOLOGY
(IMAGE FROM THE OPENGL SUPERBIBLE)
•
Wireframe – rendering only the edges of the model (old games)
TERMINOLOGY
(IMAGE FROM THE OPENGL SUPERBIBLE)
•
Hidden Surface Removal (HSR) – occluded objects can’t be seen
•
Backface culling - drawing only the triangles that are facing the camera
TERMINOLOGY
(IMAGE FROM THE OPENGL SUPERBIBLE)
•
Solid shading (this isn’t a definition) – note that everything’s hard-coded red!
TERMINOLOGY
(IMAGE FROM THE OPENGL SUPERBIBLE)
•
Flat Shading – simulate lighting
TERMINOLOGY
(IMAGE FROM THE OPENGL SUPERBIBLE)
•
Texture mapping – using an image during the rasterization process
TERMINOLOGY
(IMAGE FROM THE OPENGL SUPERBIBLE)
•
Blending – mixing colors by rendering more than one thing in one spot
•
The floor is rendered semi-transparent (yes, there are two cubes)
WHAT ABOUT THIS?
(NON-REAL-TIME)
COORDINATE SYSTEMS
•
We have several spaces:
• Local/Object – the coordinate system the mesh was modeled in
• World – the coordinate system of the virtual environment
• View/Camera – the coordinate system relative to the camera
• Clip – windowing system
•
We use mathematics to transform vertices from one space to another
COORDINATE SYSTEMS
(FOR WINDOWING SYSTEMS)
•
Because your screen is flat, we must work with 2D Cartesian Coordinates
•
x = horizontal, y = vertical
•
(0, 0) is origin
+y
-x
+x
-y
COORDINATE CLIPPING
•
When creating a window, we must define where we are in the Cartesian system
•
The window header doesn’t count in this equation
•
Middle of screen is (0, 0)
+75
+100
-100
-75
ANOTHER EXAMPLE
•
Middle of screen is (75, 100)
+150
+200
0
0
SETTING A WINDOW’S VIEWPORT
•
Window size usually doesn’t match clipping size
•
The viewport maps the clipping area to part (or all) of the window
•
Most often, the viewport fills the entire window
•
Sometimes, you want a “Picture in Picture” (PIP) rendering
EXAMPLE – ENTIRE WINDOW
(150, 200)
1900x1200 Window
0
0
PIP EXAMPLE
(150, 200)
1900x1200 Window
0
0
3D COORDINATE SYSTEMS
•
We live (and think) in 3 dimensions
•
x = horizontal, y = vertical, z = depth (can be RHS or LHS)
•
(0, 0, 0) is origin
+y
-z
-x
+x
+z
-y
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2010/ky237_zy49/ky237_zy49/index.html
BASIC PROBLEM
•
We need to convert our 3D models and display them on a 2D screen
•
To do this, we use projections by defining a viewing volume
•
These “flatten” the 3D world
•
There are two kinds:
• Orthographic (aka “parallel”)
• All objects that have the same dimension are the same size, regardless of
distance
• Viewing volume is rectangular
• Perspective
• Objects shrink with distance
• Viewing volume is shaped like a pyramid
EXAMPLE
(UPPER-RIGHT IS A PERSPECTIVE VIEW)
ORTHOGRAPHIC VIEW VOLUME
(YOU CAN SEE THE PARALLEL NOW…)
Far
clipping
plane
Near
clipping
plane
PERSPECTIVE VIEW VOLUME
Far
clipping
plane
Near
clipping
plane
Download