opengl suite et mini projetopengl suite et mini projet · opengl suite et mini projetopengl suite...
TRANSCRIPT
![Page 1: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/1.jpg)
OpenGL suite et Mini ProjetOpenGL suite et Mini Projet
DDééjjàà prpréésentsentéés : introduction s : introduction ggéénnéérale et rale et OpenGLOpenGL ((ééllééments de ments de base, gbase, gééomoméétrie, transformations)trie, transformations)
![Page 2: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/2.jpg)
LightingLighting
![Page 3: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/3.jpg)
3
Lighting PrinciplesLighting Principles
•• Lighting simulates how objects reflect Lighting simulates how objects reflect lightlight• material composition of object
• light’s color and position
• global lighting parameters• ambient light• two sided lighting
• available in both color indexand RGBA mode
![Page 4: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/4.jpg)
4
How OpenGL Simulates LightsHow OpenGL Simulates Lights
•• Phong lighting modelPhong lighting model• Computed at vertices• For per-pixel computations, needs new hardware
(next session)
•• Lighting contributorsLighting contributors• Surface material properties
• Light properties
• Lighting model properties
![Page 5: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/5.jpg)
5
CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
SurfaceNormalsSurfaceNormals
•• Normals define how a surface reflects lightNormals define how a surface reflects lightglNormal3f( glNormal3f( x, y, zx, y, z ))
• Current normal is used to compute vertex’s color
• Use unit normals for proper lighting• scaling affects a normal’s lengthglEnable( GL_NORMALIZE )
orglEnable( GL_RESCALE_NORMAL )
![Page 6: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/6.jpg)
6
Material PropertiesMaterial Properties
•• Define the surface properties of a primitiveDefine the surface properties of a primitiveglMaterialfv( glMaterialfv( face, property, valueface, property, value ););
• separate materials for front and back
• Face can be GL_FRONT or GL_BACK
GL_DIFFUSE Base color
GL_SPECULAR Highlight Color
GL_AMBIENT Low-light Color
GL_EMISSION Glow Color
GL_SHININESS Surface Smoothness
![Page 7: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/7.jpg)
7
Light PropertiesLight Properties
glLightfv( glLightfv( light, property, valuelight, property, value ););
•light specifies which light• multiple lights, starting with GL_LIGHT0
glGetIntegerv( GL_MAX_LIGHTS, &n );
•properties• colors• position and type• attenuation
![Page 8: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/8.jpg)
8
Light Sources (cont.)
• Light color properties•GL_AMBIENT
•GL_DIFFUSE
•GL_SPECULAR
•• Light color propertiesLight color properties•GL_AMBIENT
•GL_DIFFUSE
•GL_SPECULAR
![Page 9: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/9.jpg)
9
Types of LightsTypes of Lights
•• OpenGL supports two types of LightsOpenGL supports two types of Lights• Local (Point) light sources
• Infinite (Directional) light sources
•• Type of light controlled by Type of light controlled by ww coordinatecoordinate( )
( )wz
wy
wxw
zyxw at positioned Light Local
along directed LightInfinite 00
≠=
![Page 10: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/10.jpg)
10
Turning on the LightsTurning on the Lights
•• Flip each lightFlip each light’’s switchs switchglEnable( GL_LIGHTn );
•• Turn on the powerTurn on the powerglEnable( GL_LIGHTING );
![Page 11: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/11.jpg)
11
Light Material TutorialLight Material Tutorial
![Page 12: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/12.jpg)
12
Controlling a Light’s PositionControlling a Light’s Position
•• Modelview matrix affects a lightModelview matrix affects a light’’s positions position• Different effects based on when position is specified
• eye coordinates• world coordinates• model coordinates
• Push and pop matrices to uniquely control a light’s position
![Page 13: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/13.jpg)
13
Light Position TutorialLight Position Tutorial
![Page 14: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/14.jpg)
14
Advanced Lighting FeaturesAdvanced Lighting Features
•• SpotlightsSpotlights• localize lighting affects
•GL_SPOT_DIRECTION•GL_SPOT_CUTOFF•GL_SPOT_EXPONENT
![Page 15: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/15.jpg)
15
Advanced Lighting FeaturesAdvanced Lighting Features
•• Light attenuationLight attenuation• decrease light intensity with distance
•GL_CONSTANT_ATTENUATION•GL_LINEAR_ATTENUATION•GL_QUADRATIC_ATTENUATION
2
1dkdkk
fqlc
i ++=
![Page 16: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/16.jpg)
16
Light Model PropertiesLight Model Properties
glLightModelfv( glLightModelfv( property, valueproperty, value ););
•• Enabling two sided lightingEnabling two sided lightingGL_LIGHT_MODEL_TWO_SIDE
•• Global ambient colorGlobal ambient colorGL_LIGHT_MODEL_AMBIENT
•• Local viewer modeLocal viewer modeGL_LIGHT_MODEL_LOCAL_VIEWER
•• Separate specular colorSeparate specular colorGL_LIGHT_MODEL_COLOR_CONTROL
![Page 17: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/17.jpg)
17
Tips for Better LightingTips for Better Lighting
•• Recall lighting computed only at verticesRecall lighting computed only at vertices• model tessellation heavily affects lighting results
• better results but more geometry to process
•• Use a single infinite light for fastest Use a single infinite light for fastest lightinglighting• minimal computation per vertex
![Page 18: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/18.jpg)
Imaging and Raster PrimitivesImaging and Raster Primitives
![Page 19: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/19.jpg)
19
Imaging and Raster PrimitivesImaging and Raster Primitives
•• Describe OpenGLDescribe OpenGL’’s raster primitives: s raster primitives: bitmaps and image rectanglesbitmaps and image rectangles
•• Demonstrate how to get OpenGL to read Demonstrate how to get OpenGL to read and render pixel rectanglesand render pixel rectangles
![Page 20: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/20.jpg)
20
Pixel-based primitivesPixel-based primitives
•• BitmapsBitmaps• 2D array of bit masks for pixels
• update pixel color based on current color
•• ImagesImages• 2D array of pixel color information
• complete color information for each pixel
•• OpenGL doesnOpenGL doesn’’t understand image t understand image formatsformats
![Page 21: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/21.jpg)
Pixel PipelinePixel Pipeline CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
FrameBuffer
Rasterization(including
Pixel Zoom)
Per FragmentOperations
TextureMemory
Pixel-TransferOperations
(and Pixel Map)CPU
PixelStorageModes
glReadPixels(), glCopyPixels()
glBitmap(), glDrawPixels()
glCopyTex*Image();
•• Programmable pixel storageProgrammable pixel storageand transfer operationsand transfer operations
![Page 22: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/22.jpg)
22
Rendering ImagesRendering Images
glDrawPixels( glDrawPixels( width, height, format, type, width, height, format, type, pixelspixels ))
• render pixels with lower left ofimage at current raster position
• numerous formats and data typesfor specifying storage in memory• best performance by using format and type that
matches hardware
![Page 23: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/23.jpg)
23
Reading PixelsReading Pixels
glReadPixels( glReadPixels( x, y, width, height, format, x, y, width, height, format, type, pixelstype, pixels ))
• read pixels form specified (x,y) position in framebuffer
• pixels automatically converted from framebuffer format into requested format and type
•• Framebuffer pixel copyFramebuffer pixel copyglCopyPixels( glCopyPixels( x, y, width, height, typex, y, width, height, type ))
![Page 24: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/24.jpg)
Texture MappingTexture Mapping
![Page 25: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/25.jpg)
25
TextureMappingTextureMapping CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
• Apply a 1D, 2D, or 3D image to geometricprimitives
• Uses of Texturing• simulating materials
• reducing geometric complexity
• image warping
• reflections
•• Apply a 1D, 2D, or 3D image to geometricApply a 1D, 2D, or 3D image to geometricprimitivesprimitives
•• Uses of TexturingUses of Texturing• simulating materials
• reducing geometric complexity
• image warping
• reflections
![Page 26: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/26.jpg)
26
Texture MappingTexture Mapping
s
t
x
y
zgeometry screen
image
![Page 27: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/27.jpg)
27
Texture Mapping and the OpenGL PipelineTexture Mapping and the OpenGL Pipeline
•• Images and geometry flow through Images and geometry flow through separate pipelines that join at the separate pipelines that join at the rasterizerrasterizer• “complex” textures do not affect geometric
complexity
geometry pipelinevertices
pixel pipelineimagerasterizer
![Page 28: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/28.jpg)
28
Texture ExampleTexture Example
•• The texture (below) is a The texture (below) is a 256 x 256 image that has been256 x 256 image that has beenmapped to a rectangularmapped to a rectangularpolygon which is viewed inpolygon which is viewed inperspectiveperspective
![Page 29: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/29.jpg)
29
Applying Textures IApplying Textures I
•• Three stepsThree stepsspecify texture• read or generate image• assign to texture
assign texture coordinates to vertices
specify texture parameters• wrapping, filtering
![Page 30: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/30.jpg)
30
Applying Textures II
• specify textures in texture objects• set texture filter • set texture function • set texture wrap mode• set optional perspective correction hint• bind texture object • enable texturing• supply texture coordinates for vertex
• coordinates can also be generated
• specify textures in texture objects• set texture filter • set texture function • set texture wrap mode• set optional perspective correction hint• bind texture object • enable texturing• supply texture coordinates for vertex
• coordinates can also be generated
![Page 31: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/31.jpg)
31
Texture Objects
•• Like display lists for texture imagesLike display lists for texture images• one image per texture object• may be shared by several graphics contexts
•• Generate texture namesGenerate texture namesglGenTextures( n, *texIds );
![Page 32: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/32.jpg)
32
Texture Objects (cont.)Texture Objects (cont.)
•• Create texture objects with texture data and Create texture objects with texture data and statestateglTexImage2
glTextureParameteri
•• Bind textures before usingBind textures before usingglBindTexture( target, id );
![Page 33: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/33.jpg)
33
Specify TextureImageSpecify TextureImage CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
•• Define a texture image from an array of Define a texture image from an array of texels in CPU memorytexels in CPU memory
glTexImage2D( glTexImage2D( target, level, components,target, level, components,w, h, border, format, type, *texelsw, h, border, format, type, *texels ););
• dimensions of image must be powers of 2
•• Texel colors are processed by pixel Texel colors are processed by pixel pipelinepipeline• pixel scales, biases and lookups can be
done
![Page 34: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/34.jpg)
34
Converting A Texture Image
•• If dimensions of image are not power of 2If dimensions of image are not power of 2gluScaleImage( gluScaleImage( format, w_in, h_in,format, w_in, h_in,
type_in, *data_in, w_out, h_out,type_in, *data_in, w_out, h_out,type_out, *data_outtype_out, *data_out ););
• *_in is for source image
• *_out is for destination image
•• Image interpolated and filtered during Image interpolated and filtered during scalingscaling
![Page 35: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/35.jpg)
35
Specifying a Texture:Other Methods
•• Use frame buffer as source of texture imageUse frame buffer as source of texture image• uses current buffer as source image
glCopyTexImage2D(...)glCopyTexImage2D(...)
glCopyTexImage1D(...)glCopyTexImage1D(...)
•• Modify part of a defined textureModify part of a defined textureglTexSubImage2D(...)glTexSubImage2D(...)
glTexSubImage1D(...)glTexSubImage1D(...)
•• Do both with Do both with glCopyTexSubImage2D(...)glCopyTexSubImage2D(...), etc., etc.
![Page 36: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/36.jpg)
36
Mapping aTextureMapping aTexture CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
•• Based on parametric texture coordinatesBased on parametric texture coordinates•• glTexCoordglTexCoord*()*() specified at each vertexspecified at each vertex
s
t 1, 10, 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 37: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/37.jpg)
37
Generating Texture Coordinates
•• Automatically generate texture coordsAutomatically generate texture coordsglTexGen{ifd}[v]()
•• specify a planespecify a plane• generate texture coordinates based upon distance
from plane
•• generation modesgeneration modes•GL_OBJECT_LINEAR
•GL_EYE_LINEAR
•GL_SPHERE_MAP
0=+++ DCzByAx
![Page 38: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/38.jpg)
38
Texture Application Methods
•• Filter ModesFilter Modes• minification or magnification
• special mipmap minification filters
•• Wrap ModesWrap Modes• clamping or repeating
•• Texture FunctionsTexture Functions• how to mix primitive’s color with texture’s color
• blend, modulate or replace texels
![Page 39: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/39.jpg)
39
Filter Modes
Example:glTexParameteri( glTexParameteri( target, type, modetarget, type, mode ););
Texture PolygonMagnification
PolygonTextureMinification
![Page 40: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/40.jpg)
40
Mipmapped Textures
•• Mipmap allows for prefiltered texture maps of Mipmap allows for prefiltered texture maps of decreasing resolutionsdecreasing resolutions
•• Lessens interpolation errors for smaller Lessens interpolation errors for smaller textured objectstextured objects
•• Declare mipmap level during texture definitionDeclare mipmap level during texture definitionglTexImage*D( glTexImage*D( GL_TEXTURE_*D, level, GL_TEXTURE_*D, level, …… ))
•• GLU mipmap builder routinesGLU mipmap builder routinesgluBuild*DMipmaps( gluBuild*DMipmaps( …… ))
•• OpenGL 1.2 introduces advanced LOD controlsOpenGL 1.2 introduces advanced LOD controls
![Page 41: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/41.jpg)
41
Wrapping Mode
•• Example:Example:glTexParameteri( GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL_CLAMP )
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )
s
t
GL_REPEATwrapping
GL_CLAMPwrappingtexture
![Page 42: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/42.jpg)
42
Texture Functions
•• Controls how texture is appliedControls how texture is appliedglTexEnv{fi}[v](glTexEnv{fi}[v]( GL_TEXTURE_ENV, prop, paramGL_TEXTURE_ENV, prop, param ))
••GL_TEXTURE_ENV_MODEGL_TEXTURE_ENV_MODE modesmodes•GL_MODULATE
•GL_BLEND
•GL_REPLACE
•• Set blend color with Set blend color with GL_TEXTURE_ENV_COLORGL_TEXTURE_ENV_COLOR
![Page 43: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/43.jpg)
43
Tutorial: TextureTutorial: Texture
![Page 44: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/44.jpg)
44
Perspective Correction Hint
•• Texture coordinate and color interpolationTexture coordinate and color interpolation• either linearly in screen space
• or using depth/perspective values (slower)
•• Noticeable for polygons Noticeable for polygons ““on edgeon edge””glHint(glHint( GL_PERSPECTIVE_CORRECTION_HINT, hintGL_PERSPECTIVE_CORRECTION_HINT, hint ))
where hint is one of •GL_DONT_CARE•GL_NICEST•GL_FASTEST
![Page 45: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/45.jpg)
45
Is There Room for a Texture?
•• Query largest dimension of texture imageQuery largest dimension of texture image• typically largest square texture
• doesn’t consider internal format sizeglGetIntegerv(glGetIntegerv( GL_MAX_TEXTURE_SIZE, &size GL_MAX_TEXTURE_SIZE, &size ))
•• Texture proxyTexture proxy• will memory accommodate requested texture size? • no image specified; placeholder• if texture won’t fit, texture state variables set to 0
• doesn’t know about other textures• only considers whether this one texture will fit all of memory
![Page 46: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/46.jpg)
46
Texture Residency
•• Working set of texturesWorking set of textures• high-performance, usually hardware accelerated
• textures must be in texture objects
• a texture in the working set is resident
• for residency of current texture, check GL_TEXTURE_RESIDENT state
•• If too many textures, not all are residentIf too many textures, not all are resident• can set priority to have some kicked out first
• establish 0.0 to 1.0 priorities for texture objects
![Page 47: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/47.jpg)
47
Mini ProjetMini Projet
•• SystSystèème de base donnme de base donnéé• Système “complet”
• Système “donné”
•• 3 T3 Tâchesâches• Viewer avec la souris
• Chargement et affichage des textures
• Selection et animation d’un objet
![Page 48: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/48.jpg)
48
MiniRVMiniRV
•• SystSystèème donnme donnéé ::• Chargement d’une scène par un « parser » du
format obj/mtl
• « cadre général » OpenGL/fenêtres etc.
•• TP dTP déécrit dans crit dans tp.doctp.doc sur le sitesur le site
![Page 49: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/49.jpg)
49
Tâche 1 : ViewerTâche 1 : Viewer
•• Les fonctionnalitLes fonctionnalitéés doivent être les s doivent être les suivantes :suivantes :• Bouton droit + déplacement : rotation
• Bouton gauche + déplacement : translations 2D dans le plan de vue
• SHIFT + Bouton gauche + déplacement (haut/bas) : zoom
•• ExampleExample
![Page 50: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/50.jpg)
50
Tâche 1 : ViewerTâche 1 : Viewer
Actuellement tout est gActuellement tout est géérréé parpar ((RvCamera.cppRvCamera.cpp) :) :RvViewer::processMouseEvents(button,button_state,modifiers,x,y,tRvViewer::processMouseEvents(button,button_state,modifiers,x,y,typeype););
AppelAppeléée depuis le callback "bouton souris" de GLUT :e depuis le callback "bouton souris" de GLUT :
void void myGlutMouse(intmyGlutMouse(int button, button, intint button_statebutton_state, , intint x, x, intint y )y ){{
viewerviewer-->> processMouseEvents(buttonprocessMouseEvents(button, , button_statebutton_state, , glutGetModifiersglutGetModifiers(), (), x, y);x, y);
}}
et une fonction de mise et une fonction de mise àà jour :jour :void void RvViewer::update(intRvViewer::update(int mousex,intmousex,int mousey);mousey);
appelappeléée depuis le callback "mouvement souris" de GLUTe depuis le callback "mouvement souris" de GLUT
voidvoid myGlutMotionmyGlutMotion((intint x, x, intint y )y ){{
viewerviewer-->update(x,y);>update(x,y);}}
![Page 51: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/51.jpg)
51
Tâche 1 : ViewerTâche 1 : Viewer
Il faudra Il faudra completercompleter les mles mééthodes de thodes de RvExaminerViewerRvExaminerViewer (dans (dans RvCamera.hRvCamera.h) ) ::
-- begin/end rotatebegin/end rotate-- begin/end translatebegin/end translate-- begin/end zoombegin/end zoom
ainsiainsi queque
-- rotaterotate-- translate translate -- zoomzoom
permettant de gpermettant de géérer la camera. Les endroits rer la camera. Les endroits àà changer dans le code sont indiquchanger dans le code sont indiquéés s par le symbole :par le symbole :
//....//....
![Page 52: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/52.jpg)
52
Tâche 2 : ajouter les texturesTâche 2 : ajouter les textures
•• Actuellement textures lu par le Actuellement textures lu par le «« parserparser »»• Passés au programme mais pas traités
• Etat actuel• Etat final
![Page 53: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/53.jpg)
53
Tâche 2 : ajouter les texturesTâche 2 : ajouter les textures
•• Il faudra modifier les fonctions de Il faudra modifier les fonctions de traitement des texturestraitement des textures• Ajouter les champs
• Compléter les fonctions d’initialisation
• Gérer l’état OpenGL correctement pour les textures
![Page 54: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/54.jpg)
54
Tâche 3 : Sélection et animationTâche 3 : Sélection et animation
•• SSéélectionner un objet par traclectionner un objet par tracéé de rayonsde rayons• Envoyer un rayon dans la scène
• Implémenter la routine d’intersection avec l’objet
•• Animer lAnimer l’’objet sobjet séélectionnlectionnéé• Par des touches par exemple
![Page 55: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/55.jpg)
55
On-Line ResourcesOn-Line Resources
• http://www.opengl.org
• start here; up to date specification and lots of sample code• news:comp.graphics.api.opengl
• http://www.sgi.com/software/opengl
• http://www.mesa3d.org/
• Brian Paul’s Mesa 3D• http://www.cs.utah.edu/~narobins/opengl.html
• very special thanks to Nate Robins for the OpenGL Tutors• source code for tutors available here!
![Page 56: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/56.jpg)
56
Books
•• OpenGL Programming Guide, 3OpenGL Programming Guide, 3rdrd EditionEdition•• OpenGL Reference Manual, 3OpenGL Reference Manual, 3rdrd EditionEdition•• OpenGL Programming for the X Window OpenGL Programming for the X Window
SystemSystem• includes many GLUT examples
•• Interactive Computer Graphics: A topInteractive Computer Graphics: A top--down approach with OpenGL, 2down approach with OpenGL, 2ndnd EditionEdition
![Page 57: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/57.jpg)
FINFIN
![Page 58: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/58.jpg)
Animation and Depth BufferingAnimation and Depth Buffering
![Page 59: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/59.jpg)
59
Animation and Depth BufferingAnimation and Depth Buffering
•• Discuss double buffering and animation Discuss double buffering and animation •• Discuss hidden surface removal using the Discuss hidden surface removal using the
depth bufferdepth buffer
![Page 60: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/60.jpg)
60
CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
DoubleBuffering
12
48
16
12
48
16FrontBuffer
BackBuffer
Display
![Page 61: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/61.jpg)
61
Animation Using Double Buffering
Request a double buffered color bufferglutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
Clear color bufferglClear( GL_COLOR_BUFFER_BIT );
Render sceneRequest swap of front and back buffers
glutSwapBuffers();
• Repeat steps 2 - 4 for animation
Request a double buffered color bufferRequest a double buffered color bufferglutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
Clear color bufferClear color bufferglClear( GL_COLOR_BUFFER_BIT );
Render sceneRender sceneRequest swap of front and back buffersRequest swap of front and back buffers
glutSwapBuffers();
•• Repeat steps 2 Repeat steps 2 -- 4 for animation4 for animation
![Page 62: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/62.jpg)
62
Depth Buffering andHidden Surface Removal
12
48
16
12
48
16ColorBuffer
DepthBuffer
Display
![Page 63: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/63.jpg)
63
Depth Buffering Using OpenGL
Request a depth bufferglutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
Enable depth bufferingglEnable( GL_DEPTH_TEST );
Clear color and depth buffersglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
Render sceneSwap color buffers
Request a depth bufferRequest a depth bufferglutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
Enable depth bufferingEnable depth bufferingglEnable( GL_DEPTH_TEST );
Clear color and depth buffersClear color and depth buffersglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
Render sceneRender sceneSwap color buffersSwap color buffers
![Page 64: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/64.jpg)
64
An Updated Program Template
void main( int argc, char** argv ){
glutInit( &argc, argv );glutInitDisplayMode( GLUT_RGB |
GLUT_DOUBLE | GLUT_DEPTH );glutCreateWindow( “Tetrahedron” );init();glutIdleFunc( idle );glutDisplayFunc( display );glutMainLoop();
}
void main( int argc, char** argv )void main( int argc, char** argv ){{
glutInit( &argc, argv );glutInitDisplayMode( GLUT_RGB |
GLUT_DOUBLE | GLUT_DEPTH );glutCreateWindow( “Tetrahedron” );init();glutIdleFunc( idle );glutDisplayFunc( display );glutMainLoop();
}}
![Page 65: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/65.jpg)
65
An Updated Program Template (cont.)
void init( void ){
glClearColor( 0.0, 0.0, 1.0, 1.0 );}
void idle( void ){
glutPostRedisplay();}
void init( void )void init( void ){{
glClearColor( 0.0, 0.0, 1.0, 1.0 );glClearColor( 0.0, 0.0, 1.0, 1.0 );}}
void idle( void )void idle( void ){{
glutPostRedisplayglutPostRedisplay();();}}
![Page 66: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/66.jpg)
66
An Updated Program Template (cont.)void drawScene( void ){
GLfloat vertices[] = { … };GLfloat colors[] = { … };glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glBegin( GL_TRIANGLE_STRIP );/* calls to glColor*() and glVertex*() */glEnd();glutSwapBuffers();
}
void drawScene( void )void drawScene( void ){{
GLfloat vertices[] = { … };GLfloat colors[] = { … };glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glBegin( GL_TRIANGLE_STRIP );/* calls to glColor*() and glVertex*() */glEnd();glutSwapBuffers();
}}
![Page 67: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/67.jpg)
Advanced OpenGL TopicsAdvanced OpenGL Topics
![Page 68: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/68.jpg)
68
Advanced OpenGL TopicsAdvanced OpenGL Topics
•• Display Lists and Vertex ArraysDisplay Lists and Vertex Arrays•• Alpha Blending and AntialiasingAlpha Blending and Antialiasing•• Using the Accumulation BufferUsing the Accumulation Buffer•• FogFog•• Feedback & SelectionFeedback & Selection•• Fragment Tests and OperationsFragment Tests and Operations•• Using the Stencil BufferUsing the Stencil Buffer
![Page 69: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/69.jpg)
69
Immediate Mode versus Display Listed Rendering
•• Immediate Mode GraphicsImmediate Mode Graphics• Primitives are sent to pipeline and display right away
• No memory of graphical entities
•• Display Listed GraphicsDisplay Listed Graphics• Primitives placed in display lists
• Display lists kept on graphics server
• Can be redisplayed with different state
• Can be shared among OpenGL graphics contexts
![Page 70: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/70.jpg)
70
Immediate Mode versus Display Lists
Immediate Mode
Display Listed
DisplayList
PolynomialEvaluator
Per VertexOperations &
PrimitiveAssembly
Rasterization Per FragmentOperations
TextureMemory
CPU
PixelOperations
FrameBuffer
![Page 71: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/71.jpg)
71
CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
Display Lists
•• Creating a display listCreating a display listGLuint id;void init( void ){
id = glGenLists( 1 );glNewList( id, GL_COMPILE );/* other OpenGL routines */glEndList();
}
•• Call a created listCall a created listvoid display( void ){
glCallList( id );}
![Page 72: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/72.jpg)
72
Display Lists
•• Not all OpenGL routines can be stored in Not all OpenGL routines can be stored in display listsdisplay lists
•• State changes persist, even after a display list State changes persist, even after a display list is finishedis finished
•• Display lists can call other display listsDisplay lists can call other display lists•• Display lists are not editable, but you can fake Display lists are not editable, but you can fake
itit• make a list (A) which calls other lists (B, C, and D)
• delete and replace B, C, and D, as needed
![Page 73: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/73.jpg)
73
Display Lists and HierarchyDisplay Lists and Hierarchy
•• Consider model of a carConsider model of a car• Create display list for chassis
• Create display list for wheelglNewList( CAR, GL_COMPILE );glNewList( CAR, GL_COMPILE );
glCallList( CHASSIS );glCallList( CHASSIS );glTranslatef( glTranslatef( …… ););glCallList( WHEEL );glCallList( WHEEL );glTranslatef( glTranslatef( …… ););glCallList( WHEEL );glCallList( WHEEL );
……glEndList();glEndList();
![Page 74: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/74.jpg)
74
Advanced Primitives
• Vertex Arrays• Bernstein Polynomial Evaluators
• basis for GLU NURBS• NURBS (Non-Uniform Rational B-Splines)
• GLU Quadric Objects• sphere• cylinder (or cone)
• disk (circle)
•• Vertex ArraysVertex Arrays•• Bernstein Polynomial EvaluatorsBernstein Polynomial Evaluators
• basis for GLU NURBS• NURBS (Non-Uniform Rational B-Splines)
•• GLU Quadric ObjectsGLU Quadric Objects• sphere• cylinder (or cone)
• disk (circle)
![Page 75: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/75.jpg)
75
CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
Vertex Arrays
• Pass arrays of vertices, colors, etc. to OpenGL in a large chunkglVertexPointer( 3, GL_FLOAT, 0, coords )
glColorPointer( 4, GL_FLOAT, 0, colors )
glEnableClientState( GL_VERTEX_ARRAY )
glEnableClientState( GL_COLOR_ARRAY )
glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );
• All active arrays are used in rendering
•• Pass arrays of vertices, colors, etc. to Pass arrays of vertices, colors, etc. to OpenGL in a large chunkOpenGL in a large chunkglVertexPointer( 3, GL_FLOAT, 0, coords )
glColorPointer( 4, GL_FLOAT, 0, colors )
glEnableClientState( GL_VERTEX_ARRAY )
glEnableClientState( GL_COLOR_ARRAY )
glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );
•• All active arrays are used in renderingAll active arrays are used in rendering
Colordata
Vertexdata
![Page 76: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/76.jpg)
76
Why use Display Lists or Vertex Arrays?Why use Display Lists or Vertex Arrays?
•• May provide better performance than May provide better performance than immediate mode renderingimmediate mode rendering
•• Display lists can be shared between Display lists can be shared between multiple OpenGL contextmultiple OpenGL context• reduce memory usage for multi-context applications
•• Vertex arrays may format data for better Vertex arrays may format data for better memory accessmemory access
![Page 77: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/77.jpg)
77
Alpha: the 4th Color ComponentAlpha: the 4th Color Component
•• Measure of OpacityMeasure of Opacity• simulate translucent objects
• glass, water, etc.• composite images
• antialiasing
• ignored if blending is not enabledglEnable( GL_BLEND )
![Page 78: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/78.jpg)
78
CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
BlendingBlending
•• Combine pixels with whatCombine pixels with what’’s in alreadys in alreadyin the framebufferin the framebuffer
glBlendFunc( glBlendFunc( src, dstsrc, dst ))
FramebufferFramebufferPixelPixel((dstdst))
BlendingEquation
BlendingEquation
FragmentFragment((srcsrc))
BlendedBlendedPixelPixel
pfr CdstCsrcCvvv
+=
![Page 79: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/79.jpg)
79
Multi-pass RenderingMulti-pass Rendering
•• Blending allows results from multiple Blending allows results from multiple drawing passes to be combined togetherdrawing passes to be combined together• enables more complex rendering algorithms
Example of bump-mappingdone with a multi-pass
OpenGL algorithm
![Page 80: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/80.jpg)
80
AntialiasingAntialiasing
•• Removing the JaggiesRemoving the JaggiesglEnable( glEnable( modemode ))
•GL_POINT_SMOOTH•GL_LINE_SMOOTH•GL_POLYGON_SMOOTH
• alpha value computed by computingsub-pixel coverage
• available in both RGBA and colormap modes
![Page 81: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/81.jpg)
81
Accumulation BufferAccumulation Buffer
•• Problems of compositing into color Problems of compositing into color buffersbuffers• limited color resolution
• clamping• loss of accuracy
• Accumulation buffer acts as a “floating point” color buffer• accumulate into accumulation buffer• transfer results to frame buffer
![Page 82: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/82.jpg)
82
Accessing Accumulation BufferAccessing Accumulation Buffer
glAccum( glAccum( op, valueop, value ))• operations
• within the accumulation buffer: GL_ADD, GL_MULT• from read buffer: GL_ACCUM, GL_LOAD• transfer back to write buffer: GL_RETURN
•glAccum(GL_ACCUM, 0.5) multiplies each value in write buffer by 0.5 and adds to accumulation buffer
![Page 83: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/83.jpg)
83
Accumulation Buffer ApplicationsAccumulation Buffer Applications
•• CompositingCompositing•• Full Scene AntialiasingFull Scene Antialiasing•• Depth of FieldDepth of Field•• FilteringFiltering•• Motion BlurMotion Blur
![Page 84: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/84.jpg)
84
Full Scene Antialiasing : Jittering the viewFull Scene Antialiasing : Jittering the view
•• Each time we move the viewer, the image Each time we move the viewer, the image shiftsshifts• Different aliasing artifacts in each image
• Averaging images using accumulationbuffer averages outthese artifacts
![Page 85: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/85.jpg)
85
Depth of Focus : Keeping a Plane in FocusDepth of Focus : Keeping a Plane in Focus
•• Jitter the viewer to keep one plane Jitter the viewer to keep one plane unchangedunchanged
Front Plane
Back Plane
Focal Plane
eye pos1 eye pos2
![Page 86: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/86.jpg)
86
FogFog
glFog( glFog( property, valueproperty, value ))
•• Depth CueingDepth Cueing• Specify a range for a linear fog ramp
•GL_FOG_LINEAR
•• Environmental effectsEnvironmental effects• Simulate more realistic fog
•GL_FOG_EXP•GL_FOG_EXP2
![Page 87: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/87.jpg)
87
Fog TutorialFog Tutorial
![Page 88: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/88.jpg)
88
Feedback ModeFeedback Mode
•• Transformed vertex data is returned to the Transformed vertex data is returned to the application, not renderedapplication, not rendered• useful to determine which primitives will make it to
the screen
•• Need to specify a feedback bufferNeed to specify a feedback bufferglFeedbackBuffer( glFeedbackBuffer( size, type, buffersize, type, buffer ))
•• Select feedback mode for renderingSelect feedback mode for renderingglRenderMode( glRenderMode( GL_FEEDBACKGL_FEEDBACK ))
![Page 89: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/89.jpg)
89
Selection ModeSelection Mode
•• Method to determine which primitives are Method to determine which primitives are inside the viewing volumeinside the viewing volume
•• Need to set up a buffer to have results Need to set up a buffer to have results returned to youreturned to you
glSelectBuffer( glSelectBuffer( size, buffersize, buffer ))
•• Select selection mode for renderingSelect selection mode for renderingglRenderMode( glRenderMode( GL_SELECTGL_SELECT ))
![Page 90: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/90.jpg)
90
Selection Mode (cont.)Selection Mode (cont.)
•• To identify a primitive, give it a nameTo identify a primitive, give it a name• “names” are just integer values, not strings
•• Names are stack basedNames are stack based• allows for hierarchies of primitives
•• Selection Name RoutinesSelection Name RoutinesglLoadName( glLoadName( namename )) glPushName( glPushName( namename ))
glInitNames()glInitNames()
![Page 91: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/91.jpg)
91
Picking
•• Picking is a special case of selectionPicking is a special case of selection•• Programming stepsProgramming steps
• restrict “drawing” to small region near pointeruse gluPickMatrix() on projection matrix
• enter selection mode; re-render scene
• primitives drawn near cursor cause hits
• exit selection; analyze hit records
![Page 92: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/92.jpg)
92
Picking Template
glutMouseFunc( pickMe );glutMouseFunc( pickMe );
void pickMe( int button, int state, int x, int y )void pickMe( int button, int state, int x, int y ){{GLuint nameBuffer[256];GLuint nameBuffer[256];GLint hits;GLint hits;GLint myViewport[4];GLint myViewport[4];if (button != GLUT_LEFT_BUTTON || if (button != GLUT_LEFT_BUTTON ||
state != GLUT_DOWN) return;state != GLUT_DOWN) return;glGetIntegerv( GL_VIEWPORT, myViewport );glGetIntegerv( GL_VIEWPORT, myViewport );glSelectBuffer( 256, nameBuffer );glSelectBuffer( 256, nameBuffer );(void) glRenderMode( GL_SELECT );(void) glRenderMode( GL_SELECT );glInitNames();glInitNames();
![Page 93: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/93.jpg)
93
Picking Template (cont.)
glMatrixMode( GL_PROJECTION );glMatrixMode( GL_PROJECTION );glPushMatrix();glPushMatrix();glLoadIdentity();glLoadIdentity();gluPickMatrix( (GLdouble) x, (GLdouble) gluPickMatrix( (GLdouble) x, (GLdouble)
(myViewport[3](myViewport[3]--y), 5.0, 5.0, myViewport );y), 5.0, 5.0, myViewport );/* gluPerspective or glOrtho or other projection *//* gluPerspective or glOrtho or other projection */
glPushName( 1 );glPushName( 1 );/* draw something *//* draw something */
glLoadName( 2 );glLoadName( 2 );/* draw something else /* draw something else …… continue continue …… */*/
![Page 94: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/94.jpg)
94
Picking Template (cont.)Picking Template (cont.)
glMatrixMode( GL_PROJECTION );glMatrixMode( GL_PROJECTION );glPopMatrix();glPopMatrix();hits = glRenderMode( GL_RENDER );hits = glRenderMode( GL_RENDER );
/* process nameBuffer *//* process nameBuffer */}}
![Page 95: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/95.jpg)
95
Picking IdeasPicking Ideas
•• For OpenGL Picking MechanismFor OpenGL Picking Mechanism• only render what is pickable (e.g., don’t clear
screen!)• use an “invisible” filled rectangle, instead of text• if several primitives drawn in picking region, hard to
use z values to distinguish which primitive is “on top”
•• Alternatives to Standard MechanismAlternatives to Standard Mechanism• color or stencil tricks (for example, use glReadPixels() to obtain pixel value from back buffer)
![Page 96: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/96.jpg)
96
Getting to the FramebufferGetting to the Framebuffer
BlendingBlendingDepthTest
DepthTest DitheringDithering Logical
OperationsLogical
Operations
ScissorTest
ScissorTest
StencilTest
StencilTest
AlphaTest
AlphaTest
Frag
men
t
Fram
ebuf
fer
![Page 97: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/97.jpg)
97
Scissor BoxScissor Box
•• Additional Clipping TestAdditional Clipping TestglScissor( glScissor( x, y, w, hx, y, w, h ))
• any fragments outside of box are clipped
• useful for updating a small section of a viewport• affects glClear() operations
![Page 98: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/98.jpg)
98
CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
Alpha TestAlpha Test
•• Reject pixels based on their alpha valueReject pixels based on their alpha valueglAlphaFunc( glAlphaFunc( func, valuefunc, value ))
glEnable( glEnable( GL_ALPHA_TESTGL_ALPHA_TEST ))• use alpha as a mask in textures
![Page 99: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/99.jpg)
99
CPUCPU DLDL
Poly.Poly. PerVertex
PerVertex
RasterRaster FragFrag FBFB
PixelPixelTextureTexture
Stencil BufferStencil Buffer
•• Used to control drawing based on values Used to control drawing based on values in the stencil bufferin the stencil buffer• Fragments that fail the stencil test are not drawn
• Example: create a mask in stencil buffer and draw only objects not in mask area
![Page 100: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/100.jpg)
100
Controlling Stencil BufferControlling Stencil Buffer
glStencilFunc( glStencilFunc( func, ref, maskfunc, ref, mask ))• compare value in buffer with ref using func• only applied for bits in mask which are 1•func is one of standard comparison functions
glStencilOp( glStencilOp( fail, zfail, zpassfail, zfail, zpass ))• Allows changes in stencil buffer based on passing
or failing stencil and depth tests: GL_KEEP, GL_INCR
![Page 101: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/101.jpg)
101
Creating a MaskCreating a Mask
glInitDisplayMode( glInitDisplayMode( ……|GLUT_STENCIL||GLUT_STENCIL|…… ););glEnable( GL_STENCIL_TEST );glEnable( GL_STENCIL_TEST );glClearStencil( 0x1 );glClearStencil( 0x1 );
glStencilFunc( GL_ALWAYS, 0x1, 0x1 );glStencilFunc( GL_ALWAYS, 0x1, 0x1 );glStencilOp( GL_REPLACE, GL_REPLACE, glStencilOp( GL_REPLACE, GL_REPLACE,
GL_REPLACE );GL_REPLACE );
•• draw maskdraw mask
![Page 102: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/102.jpg)
102
Using Stencil MaskUsing Stencil Mask
glStencilFunc( glStencilFunc( GL_EQUAL, 0x1, 0x1GL_EQUAL, 0x1, 0x1 ))
•• draw objects where stencil = 1draw objects where stencil = 1glStencilFunc( GL_NOT_EQUAL, 0x1, 0x1 );glStencilFunc( GL_NOT_EQUAL, 0x1, 0x1 );glStencilOp( glStencilOp( GL_KEEP, GL_KEEP, GL_KEEPGL_KEEP, GL_KEEP, GL_KEEP ););
•• draw objects where stencil != 1draw objects where stencil != 1
![Page 103: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/103.jpg)
103
DitheringDithering
glEnable( glEnable( GL_DITHERGL_DITHER ))
•• Dither colors for better looking resultsDither colors for better looking results• Used to simulate more available colors
![Page 104: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/104.jpg)
104
Logical Operations on PixelsLogical Operations on Pixels
•• Combine pixels using bitwise logical Combine pixels using bitwise logical operationsoperations
glLogicOp( glLogicOp( modemode ))• Common modes
•GL_XOR•GL_AND
![Page 105: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/105.jpg)
105
Advanced ImagingAdvanced Imaging
•• Imaging SubsetImaging Subset• Only available if GL_ARB_imaging defined
• Color matrix• Convolutions• Color tables• Histogram• MinMax• Advanced Blending
![Page 106: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/106.jpg)
Diapos originales :Diapos originales :
Dave ShreinerDave ShreinerEd AngelEd Angel
Vicki ShreinerVicki Shreiner
![Page 107: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/107.jpg)
107
On-Line ResourcesOn-Line Resources
• http://www.opengl.org
• start here; up to date specification and lots of sample code• news:comp.graphics.api.opengl
• http://www.sgi.com/software/opengl
• http://www.mesa3d.org/
• Brian Paul’s Mesa 3D• http://www.cs.utah.edu/~narobins/opengl.html
• very special thanks to Nate Robins for the OpenGL Tutors• source code for tutors available here!
![Page 108: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/108.jpg)
108
Books
•• OpenGL Programming Guide, 3OpenGL Programming Guide, 3rdrd EditionEdition•• OpenGL Reference Manual, 3OpenGL Reference Manual, 3rdrd EditionEdition•• OpenGL Programming for the X Window OpenGL Programming for the X Window
SystemSystem• includes many GLUT examples
•• Interactive Computer Graphics: A topInteractive Computer Graphics: A top--down approach with OpenGL, 2down approach with OpenGL, 2ndnd EditionEdition
![Page 109: OpenGL suite et Mini ProjetOpenGL suite et Mini Projet · OpenGL suite et Mini ProjetOpenGL suite et Mini Projet Déjà présentés : introduction générale et OpenGL (éléments](https://reader030.vdocuments.fr/reader030/viewer/2022020109/5b987a7d09d3f22f0a8c0d92/html5/thumbnails/109.jpg)
109
Additional Clipping Planes
•• At least 6 more clipping planes availableAt least 6 more clipping planes available•• Good for crossGood for cross--sectionssections•• Modelview matrix moves clipping planeModelview matrix moves clipping plane•• clippedclipped•• glEnable( glEnable( GL_CLIP_PLANEiGL_CLIP_PLANEi ))
•• glClipPlane( glClipPlane( GL_CLIP_PLANEi, GLdouble* coeffGL_CLIP_PLANEi, GLdouble* coeff ))
0<+++ DCzByAx