2 coen 290 - computer graphics i evening’s goals n discuss displaying and reading image primitives...

43

Upload: stephen-reeves

Post on 14-Jan-2016

216 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and
Page 2: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

2COEN 290 - Computer Graphics I

Evening’s Goals

Discuss displaying and reading image primitives

Describe texture mapping Discuss OpenGL modes and settings for

texture mapping

Page 3: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

3COEN 290 - Computer Graphics I

Image Primitives

Color information for every pixel primitive• lots of information - lots of storage

Passed to OpenGLas an array of colorvalues

OpenGL doesn’tunderstand imagefile formats

Page 4: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

4COEN 290 - Computer Graphics I

Rendering Image Primitives

Position image primitive in world coordinates

Pass image data to OpenGL• images come in two forms

– bitmaps

– color images

Page 5: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

5COEN 290 - Computer Graphics I

Positioning Images

glRasterPos3f( x, y, z ); Transformed just like a vertex Raster position is lower left corner of image Images are clipped based

upon whether their rasterposition in inside theviewport

Corner aligned with Raster Position

Page 6: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

6COEN 290 - Computer Graphics I

Rendering Bitmaps

Bitmaps are 1-bit deep images Use the current color to update pixel in

framebuffer• sort of like a pixel mask

glBitmap( width, height, xorig, yorig, xmove, ymove, bitmap );

Page 7: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

7COEN 290 - Computer Graphics I

Rendering Images

glDrawPixels( width, height, format, type, pixels );

Write color information directly into the framebuffer

format describes how pixels are laid out in host memory

type is storage type of pixels array

Page 8: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

8COEN 290 - Computer Graphics I

Rendering Image Example

GLubyte checkerBoard[2][2][3] = {{0,0,0},{1,1,1},{1,1,1},{0,0,0}

};

glRasterPos2f( 100.0, 273.0 );

glDrawPixels( 2, 2, GL_RGB,GL_UNSIGNED_BYTE, checkerBoard );

Page 9: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

9COEN 290 - Computer Graphics I

Reading Pixels

glReadPixels( x, y, width, height, format, type, pixels );

Copy pixels from the framebuffer into host memory

(x,y)is the window coordinate of lower left corner of block of pixels

Page 10: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

10

COEN 290 - Computer Graphics I

Zooming Images

Images can be zoomed in or out

glPixelZoom( xZoom, yZoom );

strecth

shrink

shrink andreflect

stretch andreflect

1

10

01

1

zoom

zoom

zoom

zoom

Page 11: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

11

COEN 290 - Computer Graphics I

Images Have Some Limitations

Always aligned to the window Can not be rotated easily

• no concept of world space Pixel zoom inexact

• in particular, difficult to match world space dimensions

Some performance limitations

Page 12: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

12

COEN 290 - Computer Graphics I

A Much More Flexible Solution

Imagine combining geometric rendering but using an image for the shading

Principal idea behind texture mapping• also known as image

mappings

Page 13: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

13

COEN 290 - Computer Graphics I

Benefits of Texture Mapping

Greater realism with less modeling• without texture mapping, need to model

geometry at pixel resolution Fairly simple to implement

• interpolate indices into texture map– similar interpolation to Gouraud shading

Page 14: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

14

COEN 290 - Computer Graphics I

Disadvantages with Texture Mapping

Considerable performance requirements• easily implemented in hardware, but filling

pixels require much more work than Gouraud shading

• dedicated texture memory in graphics hardware is usually a limited resource

Aliasing• requires texture filtering

– more math per pixel

Page 15: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

15

COEN 290 - Computer Graphics I

Texture Mapping

Use image data to determine the color of pixels for rasterizing geometric primitives

Can texture in 1, 2 or 3 dimensions• 3D texturing very useful for volume rendering

Two step process: set up image as a texture map render geometry with texture coordinates to

reference texture

Page 16: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

16

COEN 290 - Computer Graphics I

Passing Image Data as a Texture

glTexImage2D( target, level, components, width, height,

border, format, type, pixels );

• images must have dimensions– may additionally have a one pixel border around

image

• set target to GL_TEXTURE_2D• set level to 0

– we’ll use levels later when we talk about mipmaps

mn 22

Page 17: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

17

COEN 290 - Computer Graphics I

Other Parameters

components represents number of color channels per pixel• generally

– 1 for intensity images

– 3 for RGB images

• may include an alpha channel format represents how texels are stored in

memory• texel is short for texture element

Page 18: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

18

COEN 290 - Computer Graphics I

Texture Space

s

t

(0,0)

(1,1)

Page 19: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

19

COEN 290 - Computer Graphics I

Texture Coordinates

Texture coordinates determine which texels are selected from the texture map.

s

t1, 1

0, 1

0, 0 1, 0

(s, t) = (0.2, 0.8)

(0.4, 0.2)

(0.8, 0.4)

A

B C

a

bc

Texture Space Object Space

Page 20: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

20

COEN 290 - Computer Graphics I

Specifying Texture Coordinates

Methods• explicitly specify texture coordinates

– more control

– more modeling

• have OpenGL generate them for us– easy

– limited applicability

Page 21: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

21

COEN 290 - Computer Graphics I

Explicit Texture Coordinates

glTexCoord2f( s, t ); Vertex attribute

• like color or lighting normals

glBegin( GL_TRIANGLES );glTexCoord2f( 0, 0 );glVertex3fv( v1 );glTexCoord2f( 0, 1 );glVertex3fv( v2 );…

glEnd();

Page 22: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

22

COEN 290 - Computer Graphics I

Generating Texture Coordinates

OpenGL can generate texture coordinates based on a vertex’s position in space

Compute distance from a user specified plane in space

v

s

Dvns

ˆ

D

n

n

n

z

y

x

Page 23: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

23

COEN 290 - Computer Graphics I

Setting up How to Generate Coordinates

glTexGenfv( coord, prop, params ); coord is which texture coordinate we want

to generate coords for• GL_S, GL_T, GL_R, GL_Q

set prop to GL_TEXTURE_GEN_MODE param defines which coordinate space

we’re going to generate coords in• GL_OBJECT_LINEAR• GL_EYE_LINEAR

Page 24: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

24

COEN 290 - Computer Graphics I

Object Linear vs. Eye Linear

GL_OBJECT_LINEAR computes texture coordinates in world coordinates• relationship between texture plane and object

remains the same• object looks like its been covered in wallpaper

GL_EYE_LINEAR computes texture coordinates in eye coordinates• objects looks like its “swimming” through the

texture

Page 25: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

25

COEN 290 - Computer Graphics I

Setting up Texture Generation Plane

glTexGenfv( coord, prop, params ); coord is which texture coordinate we want

to generate coords for• GL_S, GL_T, GL_R, GL_Q

prop defines which plane we’re setting• GL_OBJECT_PLANE• GL_EYE_PLANE

Page 26: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

26

COEN 290 - Computer Graphics I

Setting up Texture Generation Plane (cont.)

params defines the plane equation• plane transformed by current ModelView

matrix

GLfloat plane[] = {1,0,0,1};glTexGeni( GL_S, GL_TEXTURE_GEN_MODE,

GL_OBJECT_LINEAR );glTexGenfv( GL_S, GL_OBJECT_PLANE,

plane );glEnable( GL_TEXTURE_GEN_S );

Page 27: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

27

COEN 290 - Computer Graphics I

Texture Coordinate Modes

Recall that texture coordinates are defined only in [0,1]

Two options if outside that range• clamp values to range• ignore integer part and only use fractional part

Repeat Mode Clamp Mode

Page 28: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

28

COEN 290 - Computer Graphics I

Setting Texture Wrap Modes

glTexParameteri( target, prop,

param ); target is GL_TEXTURE_2D prop is GL_TEXTURE_WRAP_{S,T} param

• GL_CLAMP• GL_REPEAT

Page 29: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

29

COEN 290 - Computer Graphics I

Telling OpenGL how to Apply a Texture

Several options in how we should use texture’s colors for our primitive• replace primitives color with that of texture• combine the texture and primitive color

We need to set texture environment• describes how textures should be applied

Page 30: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

30

COEN 290 - Computer Graphics I

Texture Environments

glTexEnvf( target, prop, params ); prop is GL_TEXTURE_ENV_MODE param is either

• GL_DECAL• GL_BLEND

– recall that a fragment is an OpenGL pixel

texturepixel ColorColor

texturefragmentpixel ColorColorColor

Page 31: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

31

COEN 290 - Computer Graphics I

Texture Objects

Its convenient to bundle all this stuff together

glBindTexture( target, texId ); Use twice in your program

• when defining a texture object• when using that texture to render

Use glGenTextures() to create unique texture identifiers

Page 32: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

32

COEN 290 - Computer Graphics I

A Complete Example

GLuint texId;

void init( void ){GLfloat pixels[w][h][3] = { … };

glGenTextures( 1, &texId );glBindTexture( GL_TEXTURE_2D, texId );glTexParameteri( GL_TEXTURE_2D,

GL_TEXTURE_WRAP_S, GL_REPEAT );glTexParameteri( GL_TEXTURE_2D,

GL_TEXTURE_WRAP_T, GL_REPEAT );

Page 33: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

33

COEN 290 - Computer Graphics I

A Complete Example ( cont. )

glTexImage2D( GL_TEXTURE_2D, 0, 3w, h, 0, GL_RGB, GL_FLOAT,

pixels );

glEnable( GL_TEXTURE_2D );

}

Page 34: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

34

COEN 290 - Computer Graphics I

A Complete Example ( cont. )

void render( void ){

…glBindTexture( GL_TEXTURE_2D, texId );glBegin( GL_TRIANGLES );glTexCoord2fv( t0 );glVertex3fv( v0 );glTexCoord2fv( t1 );glVertex3fv( v1 );glTexCoord2fv( t2 );glVertex3fv( v2 );glEnd();

}

Page 35: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

35

COEN 290 - Computer Graphics I

And that would almost work ...

OpenGL’s default state makes an assumption which won’t quite get us there

OpenGL defines one more texture feature, called texture filtering

Page 36: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

36

COEN 290 - Computer Graphics I

Texture Filtering

Ideally, texel resolution would match pixel resolution• but then, we’d just be drawing images

When they don’t match, we need to compensate• minification - when pixels are smaller than

texels• magnification - when pixels are larger than

texels

Page 37: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

37

COEN 290 - Computer Graphics I

Filter Modes

Texture Polygon

Magnification Minification

PolygonTexture

Page 38: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

38

COEN 290 - Computer Graphics I

Texture Magnification

Not enough information to be able to fill in every pixel “correctly”

Need to set OpenGL’s magnification filter Two options

• repeat texels to fill pixels• average closest texels to fill pixels

Page 39: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

39

COEN 290 - Computer Graphics I

Texture Magnification ( cont. )

glTexParameteri( target, prop, param ); prop is GL_TEXTURE_MAG_FILTER param is either

• GL_NEAREST• GL_LINEAR

Page 40: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

40

COEN 290 - Computer Graphics I

Texture Minification

Opposite problem of magnification• too much information• more processing options

Same sampling options as magnification• GL_NEAREST• GL_LINEAR

Additional technique to reduce aliasing• mipmapping

Page 41: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

41

COEN 290 - Computer Graphics I

Mipmaps

Multiple resolution versions of the same image

Level 0 Level 1 Level 2 Level 3

Page 42: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

42

COEN 290 - Computer Graphics I

Creating Mipmaps

gluBuild2DMipMaps( target, components, width, height, format,

type, pixels ); Automatically builds mipmap levels from

source image. Automatically scales image if not

dimensions are not a power of two.

Page 43: 2 COEN 290 - Computer Graphics I Evening’s Goals n Discuss displaying and reading image primitives n Describe texture mapping n Discuss OpenGL modes and

43

COEN 290 - Computer Graphics I

Texture Minification ( cont. )

glTexParameteri( target, prop, param ); prop is GL_TEXTURE_MIN_FILTER param is either

• GL_NEAREST• GL_LINEAR• GL_NEAREST_MIPMAP_NEAREST• GL_NEAREST_MIPMAP_LINEAR• GL_LINEAR_MIPMAP_NEAREST• GL_LINEAR_MIPMAP_LINEAR