preview of 3-d graphics

11
Preview of 3-D Graphics Glenn G. Chappell [email protected] U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 17, 2003

Upload: dean-rice

Post on 02-Jan-2016

14 views

Category:

Documents


1 download

DESCRIPTION

Preview of 3-D Graphics. Glenn G. Chappell [email protected] U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 17, 2003. Review: intro2d.cpp. GLUT calls the keyboard function whenever an ASCII keypress happens. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Preview of 3-D Graphics

Preview of 3-D Graphics

Glenn G. [email protected]

U. of Alaska Fairbanks

CS 381 Lecture NotesWednesday, September 17, 2003

Page 2: Preview of 3-D Graphics

17 Sep 2003 CS 381 2

Review:intro2d.cpp GLUT calls the keyboard function whenever an ASCII keypress

happens. Use the GLUT “special” function for non-ASCII (like arrow keys). The ASCII value of the keypress is in key. Mouse position is in x, y. Your keyboard (or special) function will usually be one big switch.

GLUT calls the idle function whenever nothing else needs doing. It is useful for making time-dependent changes to the scene. Think “animation”.

Page 3: Preview of 3-D Graphics

17 Sep 2003 CS 381 3

Review:Making a Changing Display [1/3]

We looked at how to make the display change: Based on keyboard input.

• Using the keyboard (or special) function. Automatically.

• Using the idle function.

These ideas will be covered in greater detail in chapter 3. Coming up on Friday.

Page 4: Preview of 3-D Graphics

17 Sep 2003 CS 381 4

Review:Making a Changing Display [2/3] To add keypress-based display changes to a GLUT program:

A global variable is needed to hold the current state of whatever part of the display is to change.

• Declare the variable.• Initialize this variable to an appropriate value somewhere.

• In its declaration?• In the init function?

In the display function:• Use the value of this variable.

• Draw whatever should be drawn, according to the current value of the variable.

• Do not change the variable in the display function. In the keyboard function, when the appropriate key is pressed:

• Change the value of the variable.• Call “glutPostRedisplay();”.• Do not call the display function.

Page 5: Preview of 3-D Graphics

17 Sep 2003 CS 381 5

Review:Making a Changing Display [3/3]

To add automatic display changes to a GLUT program: So it just like keyboard input, except:

• Modify the idle function instead of the keyboard function.• Do not worry about the ASCII value of a key.

Doing this kind of programming may require a new mindset: Remember to handle events in the proper callbacks.

• Display does display, keyboard handles ASCII keypresses, etc.

Remember that your functions can be called in just about any order!

Again, we’ll look at this in more detail in chapter 3.

Page 6: Preview of 3-D Graphics

17 Sep 2003 CS 381 6

3-D Preview:Introduction

From a certain point of view, 3-D graphics is easy. Just use 3 coordinates instead of 2 in

your glVertex* commands. In practice, it is much trickier. We will be studying 3-D CG in detail

starting with chapter 4. For now, a preview.

Page 7: Preview of 3-D Graphics

17 Sep 2003 CS 381 7

3-D Preview:Three Issues in 3-D CG

1. Viewing and Transformations How do we look at a scene from any point of view

within the scene, looking in any direction? How do we do perspective projection? How do we rotate things about arbitrary axes in 3-D?

2. Hidden-Surface Removal When one object is behind another, we don’t want to

see the hidden one. Then there is transparency …

3. Lighting 3-D CG is lousy without lighting. How do we do it?

In addition, we want to do smooth animation.

Page 8: Preview of 3-D Graphics

17 Sep 2003 CS 381 8

3-D Preview:Quick & Dirty Solutions [1/4]

Viewing & Transformations By default, you are looking in the –z

direction.• So the +z axis points toward you.• More negative values are farther away.

The rest will have to wait a little.• See sample3d.cpp for a few hints.

Page 9: Preview of 3-D Graphics

17 Sep 2003 CS 381 9

3-D Preview:Quick & Dirty Solutions [2/4]

Hidden-Surface Removal Add GLUT_DEPTH to your glutInitDisplayMode call.

• This allocates a depth buffer.• Remember, the various constants are bitwise-or’ed

together. Add GL_DEPTH_BUFFER_BIT to your glClear

call.• This clears the depth buffer.• Again, bitwise-or.

Put glEnable(GL_DEPTH_TEST) somewhere in your initialization.

• This enables hidden-surface removal.

Page 10: Preview of 3-D Graphics

17 Sep 2003 CS 381 10

3-D Preview:Quick & Dirty Solutions [3/4]

Lighting This is tough to explain quickly. For now, either

• Ignore lighting, and make polygons lots of different colors, so you can tell them apart.

• Or, base your programs on sample3d.cpp (or something similar), and use the GLUT built-in shape functions.

• Like glutSolidTorus.

Page 11: Preview of 3-D Graphics

17 Sep 2003 CS 381 11

3-D Preview:Quick & Dirty Solutions [4/4]

Smooth Animation Use double buffering.

• Change GLUT_SINGLE to GLUT_DOUBLE in your glutInitDisplayMode call.

• Change glFlush to glutSwapBuffers in your display callback.

Now the user only sees completed frames.• No flicker in animation.• Faster sometimes, slower others.• User cannot see the frame being built.

• Sometimes this is bad, as with some complex fractals.