Objectives. Texture Mapping and NURBS Week 7. The Limits of Geometric Modeling. Modeling an Orange. Three Types of Mapping. Modeling an Orange (2)

Similar documents
CS212. OpenGL Texture Mapping and Related

OpenGL Texture Mapping. Objectives Introduce the OpenGL texture functions and options

Computer Graphics. Three-Dimensional Graphics VI. Guoying Zhao 1 / 73

Texture Mapping. CS 537 Interactive Computer Graphics Prof. David E. Breen Department of Computer Science

CS335 Graphics and Multimedia. Slides adopted from OpenGL Tutorial

CSC Graphics Programming. Budditha Hettige Department of Statistics and Computer Science

Buffers. Angel and Shreiner: Interactive Computer Graphics 7E Addison-Wesley 2015

Computer Graphics. Bing-Yu Chen National Taiwan University

CISC 3620 Lecture 7 Lighting and shading. Topics: Exam results Buffers Texture mapping intro Texture mapping basics WebGL texture mapping

Graphics. Texture Mapping 고려대학교컴퓨터그래픽스연구실.

Lecture 19: OpenGL Texture Mapping. CITS3003 Graphics & Animation

CS 5600 Spring

Most device that are used to produce images are. dots (pixels) to display the image. This includes CRT monitors, LCDs, laser and dot-matrix

Imaging and Raster Primitives

Lecture 5. Scan Conversion Textures hw2

CS452/552; EE465/505. Texture Mapping in WebGL

GRAFIKA KOMPUTER. ~ M. Ali Fauzi

Discrete Techniques. 11 th Week, Define a buffer by its spatial resolution (n m) and its depth (or precision) k, the number of

Lecture 07: Buffers and Textures

Surface Rendering. Surface Rendering

Lecture 5 3D graphics part 3

Buffers, Textures, Compositing, and Blending. Overview. Buffers. David Carr Virtual Environments, Fundamentals Spring 2005 Based on Slides by E.

三維繪圖程式設計 3D Graphics Programming Design 第七章基礎材質張貼技術嘉大資工系盧天麒

Texture Mapping. Mike Bailey.

CS 432 Interactive Computer Graphics

Texturas. Objectives. ! Introduce Mapping Methods. ! Consider two basic strategies. Computação Gráfica

Cap. 3 Textures. Mestrado em Engenharia Informática (6931) 1º ano, 1º semestre

Texture Mapping CSCI 4229/5229 Computer Graphics Fall 2016

Lecture 22 Sections 8.8, 8.9, Wed, Oct 28, 2009

Overview. Goals. MipMapping. P5 MipMap Texturing. What are MipMaps. MipMapping in OpenGL. Generating MipMaps Filtering.

CSE528 Computer Graphics: Theory, Algorithms, and Applications

Textures. Texture Mapping. Bitmap Textures. Basic Texture Techniques

Introduction to Computer Graphics with WebGL

Fog example. Fog is atmospheric effect. Better realism, helps determine distances

Announcements. Written Assignment 2 is out see the web page. Computer Graphics

CT5510: Computer Graphics. Texture Mapping

CMSC 425: Lecture 12 Texture Mapping Thursday, Mar 14, 2013

Texture Mapping and Sampling

CSE 167: Introduction to Computer Graphics Lecture #8: Textures. Jürgen P. Schulze, Ph.D. University of California, San Diego Spring Quarter 2016

ก ก ก.

INF3320 Computer Graphics and Discrete Geometry

CSE 167: Lecture 11: Textures 2. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2011

CSE 167: Introduction to Computer Graphics Lecture #9: Textures. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2013

Computer Graphics Texture Mapping

Texture Mapping and Special Effects

CSE 167: Introduction to Computer Graphics Lecture #7: Textures. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2018

Lighting and Texturing

Grafica Computazionale

Today. Texture mapping in OpenGL. Texture mapping. Basic shaders for texturing. Today. Computergrafik

Texture and other Mappings

Shading. Flat shading Gouraud shading Phong shading

+ = Texturing: Glue n-dimensional images onto geometrical objects. Texturing. Texture magnification. Texture coordinates. Bilinear interpolation

TSBK 07! Computer Graphics! Ingemar Ragnemalm, ISY

Texture mapping. Computer Graphics CSE 167 Lecture 9

CS179: GPU Programming

Workshop 3D capture, modelling and augmented reality Capture 3D, modélisation et réalité augmentée

Chapter 9 Texture Mapping An Overview and an Example Steps in Texture Mapping A Sample Program Specifying the Texture Texture Proxy Replacing All or

Computergrafik. Matthias Zwicker Universität Bern Herbst 2016

Texturing. Slides done bytomas Akenine-Möller and Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

INF3320 Computer Graphics and Discrete Geometry

Texture Mapping. Texture Mapping. Map textures to surfaces. Trompe L Oeil ( Deceive the Eye ) The texture. Texture map

CSE 167: Introduction to Computer Graphics Lecture #8: Textures. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2017

Chapter 6 Texture Mapping

B-spline Curves. Smoother than other curve forms

CS4621/5621 Fall Basics of OpenGL/GLSL Textures Basics

Steiner- Wallner- Podaras

Computational Strategies

Mipmaps. Lecture 23 Subsection Fri, Oct 30, Hampden-Sydney College. Mipmaps. Robb T. Koether. Discrete Sampling.

Computer Graphics Texture Mapping

Discussion 3. PPM loading Texture rendering in OpenGL

Assignment #5: Scalar Field Visualization 3D: Direct Volume Rendering

-=Catmull's Texturing=1974. Part I of Texturing

CPSC / Texture Mapping

9.Texture Mapping. Chapter 9. Chapter Objectives

Curves: OpenGL Evaluators - Intro

Shading/Texturing. Dr. Scott Schaefer

CS 130 Final. Fall 2015

Texturing Theory. Overview. All it takes is for the rendered image to look right. -Jim Blinn 11/10/2018

General Purpose computation on GPUs. Liangjun Zhang 2/23/2005

Texture Mapping. Computer Graphics, 2015 Lecture 9. Johan Nysjö Centre for Image analysis Uppsala University

Computergraphics Exercise 15/ Shading & Texturing

Introduction to OpenGL. Prof. Dr.-Ing. Lars Linsen

Computer Graphics

Texturing. Slides done by Tomas Akenine-Möller and Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

CS GPU and GPGPU Programming Lecture 11: GPU Texturing 1. Markus Hadwiger, KAUST

CSE 167: Introduction to Computer Graphics Lecture #6: Lights. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2014

Assignment #3: Scalar Field Visualization 3D: Cutting Plane, Wireframe Iso-surfacing, and Direct Volume Rendering

OpenGL. Jimmy Johansson Norrköping Visualization and Interaction Studio Linköping University

Today s Agenda. Basic design of a graphics system. Introduction to OpenGL

OpenGL. 1 OpenGL OpenGL 1.2 3D. (euske) 1. Client-Server Model OpenGL

QUESTION 1 [10] 2 COS340-A October/November 2009

Texture Mapping. Texture (images) lecture 16. Texture mapping Aliasing (and anti-aliasing) Adding texture improves realism.

Practical Texturing (WebGL) CS559 Fall 2016 Lecture 20 November 7th 2016

lecture 16 Texture mapping Aliasing (and anti-aliasing)

6.837 Introduction to Computer Graphics Assignment 5: OpenGL and Solid Textures Due Wednesday October 22, 2003 at 11:59pm

Department of Computer Sciences Graphics Spring 2013 (Lecture 19) Bump Maps

Preparing for Texture Access. Stored Texture Shaders. Accessing Texture Maps. Vertex Shader Texture Access

Stored Texture Shaders

CS GPU and GPGPU Programming Lecture 12: GPU Texturing 1. Markus Hadwiger, KAUST

3D Rasterization II COS 426

Transcription:

CS 480/680 INTERACTIVE COMPUTER GRAPHICS Texture Mapping and NURBS Week 7 David Breen Department of Computer Science Drexel University Objectives Introduce Mapping Methods Texture Mapping Environmental Mapping Bump Mapping Consider basic strategies Forward vs backward mapping Point sampling vs area averaging Based on material from Ed Angel, University of New Mexico 2 The Limits of Geometric Modeling Although graphics cards can render over 100 million polygons per second, that number is insufficient for many phenomena Clouds Bark Grass Scales Terrain Marble Skin Fabric 3 Modeling an Orange Consider the problem of modeling an orange (the fruit) Start with an orange-colored sphere Too simple Replace sphere with a more complex shape Does not capture surface characteristics (small dimples) Takes too many polygons to model all the dimples 4 Modeling an Orange (2) Three Types of Mapping Take a picture of a real orange, scan it, and paste onto simple geometric model This process is texture mapping Still might not be sufficient because resulting surface will be smooth Need to change local shape Bump mapping Texture Mapping Uses images to fill inside of polygons Environmental (reflection mapping) Uses a picture of the environment for texture maps Allows simulation of highly specular surfaces Bump mapping Emulates altering normal vectors during the rendering process 5 6 1

Texture Mapping Environment Mapping geometric model texture mapped 7 8 Bump Mapping Where does mapping take place? Mapping techniques are implemented at the end of the rendering pipeline Very efficient because few polygons pass down the geometric pipeline 9 10 Is it simple? Although the idea is simple---map an image to a surface---there are 3 or 4 coordinate systems involved 2D image 3D surface 11 Coordinate Systems Parametric coordinates May be used to model curved surfaces Texture coordinates Used to identify points in the image to be mapped World Coordinates Conceptually, where the mapping takes place Screen Coordinates Where the final image is really produced 12 2

Texture Mapping Mapping Functions parametric coordinates texture coordinates & Image coordinates world coordinates screen coordinates 13 Basic problem is how to find the maps Consider mapping from texture coordinates to a point a surface Appear to need three functions (x,y,z) x = x(s,t) y = y(s,t) t z = z(s,t) s But we really want to go the other way 14 Backward Mapping We really want to go backwards Given a pixel, we want to know to which point on an object it corresponds Given a point on an object, we want to know to which point in the texture it corresponds Need a map of the form s = s(x,y,z) t = t(x,y,z) Such functions are difficult to find in general Two-part mapping One solution to the mapping problem is to first map the texture to a simple intermediate surface Example: map to cylinder 15 16 Cylindrical Mapping Spherical Map parametric cylinder x = r cos (2πu) y = r sin (2πu) z = v h maps rectangle in u,v space to cylinder of radius r and height h in world coordinates s = u t = v We can use a parametric sphere x = r cos (2πu) y = r sin (2πu) cos (2πv) z = r sin (2πu) sin (2πv) in a similar manner to the cylinder but have to decide where to put the distortion maps from texture space Spheres are used in environmental maps 17 18 3

Box Mapping Easy to use with simple orthographic projection Also used in environmental maps Second Mapping Map from intermediate object to actual object Normals from intermediate to actual Normals from actual to intermediate Vectors from center of intermediate actual intermediate 19 20 Aliasing Point sampling of the texture can lead to aliasing errors miss blue stripes point samples in u,v (or x,y,z) space Area Averaging A better but slower option is to use area averaging preimage pixel point samples in texture space 21 Note that preimage of pixel is curved 22 Objectives OpenGL Texture Mapping Introduce the OpenGL texture functions and options 24 4

Basic Stragegy Texture Mapping Three steps to applying a texture 1. specify the texture read or generate image assign to texture enable texturing 2. assign texture coordinates to vertices Proper mapping function is left to application 3. specify texture parameters wrapping, filtering z t y x geometry image screen 25 s 26 Texture Example The texture (below) is a 256 x 256 image that has been mapped to a rectangular polygon which is viewed in perspective Texture Mapping and the OpenGL Pipeline Images and geometry flow through separate pipelines that join at the rasterizer complex textures do not affect geometric complexity vertices image geometry pipeline pixel pipeline rasterizer 27 28 Specify Texture Image Define Image as a Texture Define a texture image from an array of texels (texture elements) in CPU memory Glubyte my_texels[512][512][3]; Define as any other pixel map Scan Via application code Enable texture mapping glenable(gl_texture_2d) glteximage2d( target, level, iformat, w, h, border, format, type, texels ); target: type of texture, e.g. GL_TEXTURE_2D level: used for mipmapping (discussed later) iformat : internal format of texels w, h: width and height of texels in pixels border: used for smoothing (discussed later) format and type: describe texels texels: pointer to texel array OpenGL supports 1-4 dimensional texture maps glteximage2d(gl_texture_2d, 0, GL_RGB, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, my_texels); 29 30 5

Converting A Texture Image OpenGL requires texture dimensions to be powers of 2 If dimensions of image are not powers of 2 gluscaleimage( format, w_in, h_in, type_in, *data_in, w_out, h_out, type_out, *data_out ); format GL_RGB,GL_RGBA, GL_LUMINANCE, etc. data_in is source image data_out is for destination image Image interpolated and filtered during scaling 31 Based on parametric texture coordinates gltexcoord*() specified at each vertex t 0, 1 a b Mapping a Texture Texture Space 1, 1 0, 0 1, 0 s c (0.4, 0.2) B Object Space (s, t) = (0.2, 0.8) A C (0.8, 0.4) 32 Typical Code Transforming Textures glbegin(gl_polygon); glcolor3f(r0, g0, b0); glnormal3f(u0, v0, w0); gltexcoord2f(s0, t0); glvertex3f(x0, y0, z0); glcolor3f(r1, g1, b1); glnormal3f(u1, v1, w1); gltexcoord2f(s1, t1); glvertex3f(x1, y1, z1);.. glend(); Texture coordinates can be transformed glmatrixmode( GL_TEXTURE ); Texture matrix can rotate, translate and scale textures Note that we can use vertex arrays to increase efficiency 33 34 Interpolation OpenGL uses bilinear interpolation to find proper texels from specified texture coordinates Can be distortions good selection of tex coordinates poor selection of tex coordinates texture stretched over trapezoid showing effects of bilinear interpolation Texture Parameters OpenGL has a variety of parameters that determine how texture is applied Wrapping parameters determine what happens if s and t are outside the (0,1) range Filter modes allow us to use area averaging instead of point samples Mipmapping allows us to use textures at multiple resolutions Environment parameters determine how texture mapping interacts with shading 35 36 6

Wrapping Mode Clamping: if s,t > 1 use 1, if s,t <0 use 0 Repeating: use s,t modulo 1 gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ) gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ) Magnification and Minification Many pixels cover one texel (magnification) or one pixel covers many texels (minification) Can use point sampling (nearest texel) or linear filtering ( 2 x 2 filter) to obtain texture values t texture s GL_REPEAT wrapping GL_CLAMP wrapping Texture Polygon Magnification Texture Polygon Minification 37 38 Filter Modes Modes determined by gltexparameteri( target, type, mode ) Mipmapped Textures Mipmapping uses prefiltered texture maps of decreasing resolutions gltexparameteri(gl_texture_2d, GL_TEXURE_MAG_FILTER, GL_NEAREST); gltexparameteri(gl_texture_2d, GL_TEXURE_MIN_FILTER, GL_LINEAR); Note that linear filtering requires a border of an extra texel for filtering at edges (border = 1) 39 Lessens interpolation errors for smaller textured objects Declare mipmap level during texture definition glteximage2d( GL_TEXTURE_2D, level, ) GLU mipmap builder routine will build all the textures from a given image - glubuild2dmipmaps( ) 40 Mipmapped Textures glteximage2d( GL_TEXTURE_2D, 0, GL_RGB, 64, 64, GL_RGB, GL_UNSIGNED_BYTE, image0) glteximage2d( GL_TEXTURE_2D, 1, GL_RGB, 32, 32, GL_RGB, GL_UNSIGNED_BYTE, image1) glteximage2d( GL_TEXTURE_2D, 2, GL_RGB, 16, 6, GL_RGB, GL_UNSIGNED_BYTE, image1) glubuild2dmipmaps(glenum target, GLint internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data ) glubuild2dmipmaps( GL_TEXTURE_2D, GL_RGB, width, height, GL_RGB, GL_UNSIGNED_BYTE, data ); Mipmap Filter Modes Modes determined by gltexparameteri( target, type, mode ) How to filter in image (GL_*). How to filter between images (MIPMAP_*). gltexparameteri(gl_texture_2d, GL_TEXURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST); gltexparameteri(gl_texture_2d, GL_TEXURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR 41 42 7

Example Texture Functions point sampling mipmapped point sampling linear filtering mipmapped linear filtering Controls how texture is applied gltexenv{fi}[v]( GL_TEXTURE_ENV, prop, param ) GL_TEXTURE_ENV_MODE modes GL_MODULATE: modulates with computed shade (multiply colors) GL_BLEND: blends with an environmental color GL_REPLACE: use only texture color gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_MODULATE); Set blend color with GL_TEXTURE_ENV_COLOR gltexenvfv(gl_texture_env, GL_TEXTURE_ENV_COLOR, color); 43 44 Perspective Correction Hint Texture coordinate and color interpolation either linearly in screen space or using depth/perspective values (slower) Noticeable for polygons on edge glhint( GL_PERSPECTIVE_CORRECTION_HINT, hint ) where hint is one of GL_DONT_CARE GL_NICEST GL_FASTEST 45 Generating Texture Coordinates OpenGL can generate texture coordinates automatically gltexgen{ifd}[v]() specify a plane generate texture coordinates based upon distance from the plane s = a s x + b s y + c s z + d s w t = a t x + b t y + c t z + d t w generation modes GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP (used for environmental maps) 46 Generating Texture Coordinates /* s = x/2 + 1/2 */ Glfloat planes[] = {0.5, 0.0, 0.0, 0.5}; /* t = y/2 + 1/2 */ Glfloat planet[] = {0.0, 0.5, 0.0, 0.5}; gltexgeni(gl_s, GL_TEXTURE_MODE, GL_OBJECT_LINEAR); gltexgeni(gl_t, GL_TEXTURE_MODE, GL_OBJECT_LINEAR); gltexgenfv(gl_s, GL_OBJECT_LINEAR, planes); gltexgenfv(gl_t, GL_OBJECT_LINEAR, planet); Texture Objects Texture is part of the OpenGL state If we have different textures for different objects, OpenGL will be moving large amounts data from processor memory to texture memory Recent versions of OpenGL have texture objects one image per texture object Texture memory can hold multiple texture objects glgentextures() glbindtexture() gldeletetextures() 47 48 8

Other Texture Features Environmental Maps Start with image of environment through a wide angle lens Can be either a real scanned image or an image created in OpenGL Use this texture to generate a spherical map Use automatic texture coordinate generation Multitexturing Apply a sequence of textures through cascaded texture units 49 Applying Textures Summary 1. specify textures in texture objects 2. set texture filter 3. set texture function 4. set texture wrap mode 5. set optional perspective correction hint 6. bind texture object 7. enable texturing 8. supply texture coordinates for vertex coordinates can also be generated 50 NURBS in OpenGL Go to CS430 B-Spline Lecture Data Structures // c object GLUnurbsObj * nurb ; // control points for the nurbs float cpoints [ 4 ][ 4 ][ 3 ]; // ((0,0), (0,1), (1,0), (1,1)) float tcoords [ 2 ][ 2 ][ 2 ]; // knots. #cpʼs = #knots - order for each param float knots[ 8 ] = { 0.0, 0.0, 0.0, 0.0, 1.0,1.0, 1.0, 1.0 }; float tknots[ 4 ] = { 0.0, 0.0, 1.0, 1.0 }; Create the Object // set up the object to draw the NURB // create the NURB nurb = glunewnurbsrenderer(); // set a tolerance (drawing nurbs is not exact) glunurbsproperty( nurb, GLU_SAMPLING_TOLERANCE, 25.0 ); // how to draw the nurb (fill/patch outline/points/lines) glunurbsproperty( nurb, GLU_DISPLAY_MODE, GLU_FILL ); 53 54 9

// for depth Enabling NURBS glenable( GL _DEPTH_TEST ); // to automatically generate NURB normals glenable( GL _AUTO_NORMAL ); // normalize the normals glenable( GL _NORMALIZE ); // enable lighting to see glenable( GL _LIGHTING ); 55 Drawing the NURB // begin the surface glubeginsurface( nurb ); // draw the nurb glunurbssurface( nurb, 4, tknots, 4, tknots, 2*2, 2, &tcoords[0][0][0], 2, 2, GL_MAP2_TEXTURE_COORD_2 ); glunurbssurface( nurb, 8, knots, 8, knots, 4 * 3, 3, &cpoints[0][0][0], 4, 4, GL_MAP2_VERTEX_3 ); // end the surface gluendsurface( nurb ); 56 glunurbssurface void glunurbssurface( GLUnurbs *nurb, GLint sknotcount, GLfloat* sknots, GLint tknotcount, GLfloat* tknots, GLint sstride, GLint tstride, GLfloat* control, GLint sorder, GLint torder, GLenum type ) nurb - the NURBS object created with glunewnurbsrenderer() sknots - array of sknotcount nondecreasing knot values in the parametric s direction tknots - array of tknotcount nondecreasing knot values in the parametric t direction sstride, tstride - offset (# of floating point values) between successive control points in the s & t direction in control control - array containing control points for the NURBS surface sorder, torder - order of NURBS polynomial in s & t direction type - GL_MAP2_VERTEX_3, GL_MAP2_NORMAL, GL_MAP2_TEXTURE_COORD_2, etc. glunurbssurface( nurb, 8, knots, 8, knots, 4 * 3, 3, &cpoints[0][0][0], 4, 4, GL_MAP2_VERTEX_3 ); 57 10