h331 computer graphics
Download
Skip this Video
Download Presentation
H331: Computer Graphics

Loading in 2 Seconds...

play fullscreen
1 / 59

H331: Computer Graphics - PowerPoint PPT Presentation


  • 98 Views
  • Uploaded on

H331: Computer Graphics. Philip Dutré Department of Computer Science Wednesday, February 25. Today. Graphics programming Book: Chapters 3, 4, 10. Announcements. Practicum 1 available http://www.cs.kuleuven.ac.be/~graphics/H331/ Practicum 1 & 2: 7 points / 20 Best: 4 2 nd best: 3.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' H331: Computer Graphics' - rocio


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
h331 computer graphics

H331: Computer Graphics

Philip Dutré

Department of Computer Science

Wednesday, February 25

today
Today
  • Graphics programming
  • Book: Chapters 3, 4, 10
announcements
Announcements
  • Practicum 1 available
    • http://www.cs.kuleuven.ac.be/~graphics/H331/
  • Practicum 1 & 2: 7 points / 20
    • Best: 4
    • 2nd best: 3
announcements1
Announcements
  • SIGGRAPH Los Angeles August 8-12
  • http://www.siggraph.org/s2004/
  • Student volunteers! (Deadline: February 25)
3d 2d
3D  2D
  • How to transform the 3D world to a 2D image?
  • 3 aspects:
    • Objects: exist in space, independent of viewer
    • Viewer: camera, human, ….
    • Lights: shading, shadows, …
3d 2d1
3D  2D

Objects (points, lines, polygons)

Described by vertices

Lights (e-m spectrum)

(350-780 nm)

Viewer = camera

synthetic camera
Synthetic Camera

Projection plane in front of center-of-projection:

synthetic camera1
Synthetic Camera

Clipping: looking through a window

3d apis
3D APIs
  • Synthetic camera is basis of 3D API
    • OpenGL, PHIGS, Direct 3D, VRML,JAVA-3D, GKS, …
  • We need to functions to specify:
    • Objects: vertices that describe points, lines, polygons
    • Camera: position, orientation, width, height
    • Light sources: position, color
    • Materials: reflection characteristics
3d apis1
3D APIs

glBegin(GL_POLYGON)

glVertex3f(0.0, 0.0, 0.0);

glVertex3f(0.0, 1.0, 0.0);

glVertex3f(0.0, 0.0, 0.1);

glEnd();

gluLookAt(posx, posy, posz, atx, aty, atz, …);

glPerspective(view_angle, …);

3d apis2
3D APIs
  • 3D API performs modeling + rendering
  • But … modeling can also be done ‘off-line’
    • Write model to file
    • Read file in 3D API and transform to 3D API modeling commands
  • RenderMan (Pixar)
    • Prepares off-line model for rendering
    • Rendering takes ‘converted’ model
graphics hardware
Graphics hardware
  • 3D ‘world’ coordinates  2D ‘screen’ coordinates
graphics hardware1
Graphics hardware
  • 3D vertex  2D pixel

Transform to camera coordinate system

Clip away things we don’t see in the camera window

3D coordinates  2D coordinates

Transform to pixels in the frame buffer

how to draw things
How to draw things?
  • Given: window on the screen
  • Graphics API (e.g. OpenGL) has something of the form:

plotPixel(int x, int y)

how to draw things1

window

How to draw things?
  • plotPixel(289,190)
  • plotPixel(320,128)
  • plotPixel(239,67)
  • plotPixel(194,101)
  • plotPixel(129,83)
  • plotPixel(75,73)
  • plotPixel(74,74)
  • plotPixel(20,10)
how to draw things2

Y

window

y

X

x

How to draw things?

plotPixel(x,y)

screen

why is this impractical
Why is this impractical?
  • Coordinates are expressed in screen space, but objects live in (3D) world space
  • Resizing window implies we have to change coordinates of objects to be drawn
  • We want to make a separation between:
    • values to describe geometrical objects
    • values needed to draw these objects on the screen
how to draw things3
How to draw things?
  • Specify points to OpenGL

glVertex*( … )

glVertex2i( … ) glVertex3i( … )

glVertex2f( … ) glVErtex3f( … )

glBegin(GL_LINES);

glVertex2f(x1, y1);

glVertex2f(x2, y2);

glEnd();

glBegin(GL_POINTS);

glVertex2f(x1, y1);

glVertex2f(x2, y2);

glEnd();

how to draw things4
How to draw things?

For (k=0; k<500; k++) {

// compute point k

x = …;

y = …;

glBegin(GL_POINTS);

glVertex2f(x, y);

glEnd();

}

glFlush();

more about opengl
More about OpenGL…
  • OpenGl = set of libraries
more about opengl1
More about OpenGL…
  • OpenGl supports geometric primitives and raster primitives
geometric primitives in opengl
Geometric Primitives in OpenGL
  • Geometric primitives are defined by vertices
    • GL_POINTS
    • GL_LINES
    • GL_LINE_STRIP, GL_LINE_LOOP
geometric primitives in opengl1
Geometric Primitives in OpenGL
  • Closed loops = polygons
  • Polygons: describe surfaces
geometric primitives in opengl2
Geometric Primitives in OpenGL
  • GL_POLYGON, GL_QUADS, …
viewing in opengl
Viewing in OpenGL
  • Scene is independent of camera
  • gluOrtho2D(left, tight, bottom, top)
3d primitives
3D primitives

void triangle(point3 a, point3 b, point3 c) {

glBegin(GL_POLYGON)

glVertex3fv(a);

glVertex3fv(b);

glVertex3fv(c);

glEnd();

}

void tetrahedron () {

glColor3f(1.0,0.0,0.0);

triangle(v[0], v[1], v[2]);

}

3d primitives1
3D primitives
  • Hidden surfaces?
  • Z-buffer
    • Keep depth for each pixel
  • Initialize!
    • glClear(GL_COLOR_BUFFER_BIT);
    • glClear(GL_DEPTH_BUFFER_BIT);
    • glFlush();
world window viewport
World window & viewport
  • World window:specifies what part of the world should be drawn
  • Viewport:rectangular area in the screen window in which we will draw
world window viewport1

window

World window & viewport

screen window

world window

viewport

mapping world window to viewport1

window

Mapping: world window to viewport

Maintain proportions!

Vt

Wt

Wb

Vb

Vl

Vr

Wl

Wr

mapping world window to viewport3
Mapping: world window to viewport
  • If x = Wl, then sx = Vl
  • If x = Wr, then sx = Vr
  • If x = f*(Wr-Wl), then sx = f*(Vr-Vl)
  • If x < Wl, then sx < Vl
  • If x > Wr, then sx > Vr
  • … also for y and sy
world window
World window
  • Pick size automatically

world window

clipping
Clipping
  • Lines outside of world window are not to be drawn.
  • Graphics API clips them automatically.
  • But clipping is a general tool in graphics!
clipping2
Clipping

A

B

clipSegment(…):

  • Return 1 if line within window
  • Return 0 if line outside window
  • If line partially inside, partially outside: clip and return 1

C

E

D

cohen sutherland clipping
Cohen-Sutherland clipping
  • Trivial accept/reject test!

Trivial reject

Trivial accept

cohen sutherland region outcodes
Cohen-Sutherland region outcodes
  • 4 bits:

TTFF

Left of window?

Above window?

Right of window?

Below window?

cohen sutherland region outcodes1
Cohen-Sutherland region outcodes
  • Trivial accept: both endpoints are FFFF
  • Trivial reject: both endpoints have T in the same position

TTFF

FTFF

FTTF

TFFF

FFFF

FFTF

TFFT

FFFT

FFTT

cohen sutherland chopping
Cohen-Sutherland: chopping
  • If segment is neither trivial accept or reject:
    • Clip against edges of window in turn
cohen sutherland line clipper
Cohen-Sutherland line clipper
  • int clipSegment (point p1, point p2)

Do {

If (trivial accept) return (1)

If (trivial reject) return (0)

If (p1 is outside)

if (p1 is left) chop left

else if (p1 is right) chop right

If (p2 is outside)

} while (1)

raster graphics
Raster Graphics
  • What is an image?
    • Array of pixels
  • How to convert lines and polygons to pixels?
    • Continuous to discrete
    • Scan conversion
displays
Displays
  • Early displays were vector displays
    • Electron beam traces lines
    • Image is sequence of endpoints
    • Wireframes, no solid fills
displays1
Displays
  • Raster displays
    • Electron beam traces regular pattern
    • Image is 2D array of pixels
    • Fast, but discretisation errors
  • Every pixel has b bits for color
    • B&W: 1 bit
    • Basic colors: 8, 15, 16, 24 bits
    • High-end: 96 bits
displays and framebuffers
Displays and Framebuffers
  • Raster image is stored in memory as a 2D array of pixels = framebuffer
  • The color of each pixel determines the intensity of the beam
  • Video hardware scans framebuffer at 60Hz
    • Changes in framebuffer show on screen => double buffering
    • Switch buffers when one buffer is finished
displays and framebuffers1
Displays and Framebuffers

Framebuffer

(double buffer)

display

Video controller

Graphics software (rasterizer)

rasterizer example
Rasterizer: Example
  • How to rasterize a line, once its 2D screen coordinates are known?
  • Given: endpoints of a line
  • What pixels to draw?
scan converting lines1
Scan converting lines
  • find the pixels closest to the ideal line
  • assume slope m 1: illuminate one pixel per column, work incrementally
  • if m1 : x  y.
scan converting lines2
Scan converting lines

y = y1;

for (i = x1; i<=x2; i++) {

plotPixel(i, round(y));

y += m;

}

scan converting lines3
Scan converting lines
  • Inefficient: compute round(y) for each integer x and floating point addition
  • Bresenham’s algorithm: only integer arithmetic
  • Standard for most HW+SW rasterizers
scan converting lines4
Scan converting lines
  • What’s the next pixel?
  • Decision variable d = a – b if (d>0) … else …
  • Or d = Dx(a-b)
scan converting lines5
Scan converting lines
  • dk+1 = dk – 2Dy ordk+1 = dk – 2(Dy-Dx)
ad