Wednesday, December 15, 2010

Advanced Graphics Programming Techniques Using OpenGL













Contents
1 Introduction 1
1.1 OpenGLVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 CourseNotesandSlideSetOrganization . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Acknowledgments for 1997 Course Notes . . . . . . . . . . . . . . . . . . . . . . 2
1.5 CourseNotesWeb Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 About OpenGL 4
3 Modeling 5
3.1 ModelingConsiderations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Decomposition and Tessellation . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 GeneratingModelNormals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3.1 ConsistentVertexWinding . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3.2 SmoothShading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Triangle-stripping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.4.1 GreedyTri-stripping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.5 CappingClippedSolidswiththeStencilBuffer . . . . . . . . . . . . . . . . . . . 15
3.6 ConstructiveSolidGeometrywiththeStencilBuffer . . . . . . . . . . . . . . . . 16
4 Geometry and Transformations 25
4.1 StereoViewing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.1 FusionDistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.2 ComputingtheTransforms . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2 DepthofField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3 TheZCoordinateandPerspectiveProjection . . . . . . . . . . . . . . . . . . . . 28
4.3.1 DepthBuffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4 Image Tiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.5 Moving the Current Raster Position . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.6 PreventingClippingofWideLinesandPoints . . . . . . . . . . . . . . . . . . . . 34
4.7 DistortionCorrection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5 Texture Mapping 39
5.1 Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.1 Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.2 TextureEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2 MipmapGeneration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3 TextureMapLimits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.4 Anisotropic Texture Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.5 PagingTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.5.1 TextureSubloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5.2 PagingImages inSystemMemory . . . . . . . . . . . . . . . . . . . . . . 49
5.6 TransparencyMappingandTrimmingwithAlpha . . . . . . . . . . . . . . . . . . 50
5.7 Billboards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.8 RenderingText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.9 TextureMosaicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.10 TextureCoordinateGeneration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.11 ColorCodingandContouring . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.12 AnnotatingMetrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.13 ProjectiveTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.13.1 HowtoProject aTexture . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.14 EnvironmentMapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.15 ImageWarpingandDewarping . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.16 3DTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.16.1 Using3DTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.16.2 3DTextures toRenderSolidMaterials . . . . . . . . . . . . . . . . . . . . 60
5.16.3 3D Textures as Multidimensional Functions . . . . . . . . . . . . . . . . . 60
5.17 Line Integral Convolution (LIC) with Texture . . . . . . . . . . . . . . . . . . . . 61
5.17.1 Sampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.17.2 Using OpenGL to Create Line Integral Convolution (LIC) Images . . . . . 63
5.17.3 Line Integral Convolution Procedure . . . . . . . . . . . . . . . . . . . . . 64
5.17.4 Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.17.5 MaximizingContrast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.17.6 GoingFarther . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.18 DetailTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.18.1 SignedIntensityDetailTextures . . . . . . . . . . . . . . . . . . . . . . . 68
5.18.2 MakingDetailTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.19 GradualCutawayViews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.19.1 Steps toGeneratingaCutawayShell . . . . . . . . . . . . . . . . . . . . . 70
5.19.2 Refinements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.19.3 RenderingaSurfaceTexturedShell . . . . . . . . . . . . . . . . . . . . . 72
5.19.4 AlphaBufferApproach . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.19.5 NoAlphaBufferApproach . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.20 ProceduralTextureGeneration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.20.1 Filtered Noise Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 74


Another OpenGL Books
Another Multimedia Books
Download


5.20.2 GeneratingNoiseFunctions . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.20.3 High Resolution Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.20.4 Spectral Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.20.5 OtherNoiseFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.20.6 Turbulence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.20.7 Example: ImageWarping . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.20.8 Generating3DNoise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.20.9 Generating2DNoisetoSimulate3DNoise . . . . . . . . . . . . . . . . . 79
5.20.10Trade-offsBetween 3Dand2DTechniques . . . . . . . . . . . . . . . . . 79
6 Blending 80
6.1 Compositing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.2 AdvancedBlending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.3 Painting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.4 BlendingwiththeAccumulationBuffer . . . . . . . . . . . . . . . . . . . . . . . 81
6.5 BlendingTransitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7 Antialiasing 84
7.1 Line andPointAntialiasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.2 Polygon Antialiasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.3 Multisampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.4 AntialiasingWithTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.5 AntialiasingwithAccumulationBuffer . . . . . . . . . . . . . . . . . . . . . . . . 87
8 Lighting 90
8.1 Phong Shading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.1.1 Phong Highlightswith Texture . . . . . . . . . . . . . . . . . . . . . . . . 90
8.1.2 ImprovedHighlightShape . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.1.3 SpotlightEffects usingProjectiveTextures . . . . . . . . . . . . . . . . . 91
8.1.4 Phong Shading by Adaptive Tessellation . . . . . . . . . . . . . . . . . . 93
8.2 LightMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.2.1 2DTextureLightMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.2.2 3DTextureLightMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.3 OtherLightingModels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.4 Global Illumination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
8.5 BumpMappingwithTextures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.5.1 TangentSpace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.5.2 Going for Higher Quality . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.5.3 Blending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.5.4 WhyDoesThisWork? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.5.5 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.6 ChoosingMaterial Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.6.1 ModelingMaterialType . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.6.2 ModelingMaterial Smoothness . . . . . . . . . . . . . . . . . . . . . . . 107
9 Scene Realism 110
9.1 MotionBlur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.2 DepthofField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.3 Reflections andRefractions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
9.3.1 PlanarReflectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
9.3.2 SphereMapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
9.4 CreatingShadows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
9.4.1 ProjectionShadows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
9.4.2 ShadowVolumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
9.4.3 ShadowMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
9.4.4 Soft Shadows by Jittering Lights . . . . . . . . . . . . . . . . . . . . . . . 133
9.4.5 SoftShadowsUsingTextures . . . . . . . . . . . . . . . . . . . . . . . . 133
10 Transparency 135
10.1 Screen-DoorTransparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.2 AlphaBlending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.3 Sorting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.4 UsingtheAlphaFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.5 UsingMultisampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
11 Natural Phenomena 139
11.1 Smoke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
11.2 VaporTrails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
11.3 Fire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
11.4 Explosions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
11.5 Clouds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
11.6 Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
11.7 LightPoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
11.8 OtherAtmosphericEffects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
11.9 ParticleSystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
11.9.1 RepresentingParticles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
11.9.2 ParticleSizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
11.9.3 Large andSmallPoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
11.9.4 Antialiasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
11.9.5 “Fat”Particles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
11.9.6 ParticleSystems inaScene . . . . . . . . . . . . . . . . . . . . . . . . . . 149
11.10Precipitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
12 Image Processing 152
12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
12.1.1 ThePixelTransferPipeline . . . . . . . . . . . . . . . . . . . . . . . . . . 152
12.1.2 GeometricDrawingandTexturing . . . . . . . . . . . . . . . . . . . . . . 153
12.1.3 TheFramebuffer andPer-FragmentOperations . . . . . . . . . . . . . . . 153
12.1.4 The ImagingSubset inOpenGL1.2 . . . . . . . . . . . . . . . . . . . . . 154
12.2 Colors and Color Spaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
12.2.1 TheAccumulationBuffer: InterpolationandExtrapolation . . . . . . . . . 155
12.2.2 PixelScale andBiasOperations . . . . . . . . . . . . . . . . . . . . . . . 157
12.2.3 Look-Up Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
12.2.4 TheColorMatrixExtension . . . . . . . . . . . . . . . . . . . . . . . . . 160
12.3 Convolutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
12.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
12.3.2 The Convolution Operation . . . . . . . . . . . . . . . . . . . . . . . . . 163
12.3.3 Convolutions Using the Accumulation Buffer . . . . . . . . . . . . . . . . 165
12.3.4 The Convolution Extension . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.3.5 Useful Convolution Filters . . . . . . . . . . . . . . . . . . . . . . . . . . 168
12.3.6 CorrelationandFeatureDetection . . . . . . . . . . . . . . . . . . . . . . 171
12.4 ImageWarping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
12.4.1 ThePixelZoomOperation . . . . . . . . . . . . . . . . . . . . . . . . . . 172
12.4.2 WarpsUsingTextureMapping . . . . . . . . . . . . . . . . . . . . . . . . 173
13 Volume Visualization with Texture 174
13.1 Overviewof theTechnique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
13.2 3DTextureVolumeRendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
13.3 2DTextureVolumeRendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
13.4 BlendingOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
13.4.1 Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
13.4.2 Attenuate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
13.4.3 MaximumIntensityProjection . . . . . . . . . . . . . . . . . . . . . . . . 178
13.4.4 Under . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
13.5 SamplingFrequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
13.6 ShrinkingtheVolume Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
13.7 VirtualizingTextureMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
13.8 MixingVolumetric andGeometricObjects . . . . . . . . . . . . . . . . . . . . . . 180
13.9 TransferFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
13.10Volume Cutting Planes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
13.11ShadingtheVolume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
13.12WarpedVolumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
14 Using the Stencil Buffer 183
14.1 DissolveswithStencil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
14.2 DecalingwithStencil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
14.3 FindingDepthComplexitywiththeStencilBuffer . . . . . . . . . . . . . . . . . . 189
14.4 Compositing Images with Depth . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
15 Line Rendering Techniques 192
15.1 WireframeModels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
15.2 HiddenLines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
15.2.1 glPolygonOffset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
15.2.2 glDepthRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
15.3 HaloedLines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
15.4 Silhouette Edges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
15.5 PreventingSmoothWideLineOverlap . . . . . . . . . . . . . . . . . . . . . . . . 198
15.6 EndCapsOnWideLines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
16 Tuning Your OpenGL Application 199
16.1 What IsPipelineTuning? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
16.1.1 Three-StageModelof theGraphicsPipeline . . . . . . . . . . . . . . . . . 199
16.1.2 Finding Bottlenecks in Your Application . . . . . . . . . . . . . . . . . . 200
16.2 OptimizingYourApplicationCode . . . . . . . . . . . . . . . . . . . . . . . . . . 201
16.2.1 OptimizeCache andMemoryUsage . . . . . . . . . . . . . . . . . . . . . 201
16.2.2 StoreData inaFormatThat isEfficient forRendering . . . . . . . . . . . 202
16.2.3 Per-PlatformTuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
16.3 TuningtheGeometrySubsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
16.3.1 UseExpensiveModesEfficiently . . . . . . . . . . . . . . . . . . . . . . 204
16.3.2 OptimizingTransformations . . . . . . . . . . . . . . . . . . . . . . . . . 204
16.3.3 OptimizingLightingPerformance . . . . . . . . . . . . . . . . . . . . . . 205
16.3.4 AdvancedGeometry-LimitedTuningTechniques . . . . . . . . . . . . . . 207
16.4 TuningtheRasterSubsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
16.4.1 Using Backface/Frontface Removal . . . . . . . . . . . . . . . . . . . . . 207
16.4.2 MinimizingPer-PixelCalculations . . . . . . . . . . . . . . . . . . . . . . 208
16.4.3 OptimizingTextureMapping . . . . . . . . . . . . . . . . . . . . . . . . . 209
16.4.4 ClearingtheColor andDepthBuffersSimultaneously . . . . . . . . . . . 210
16.5 RenderingGeometryEfficiently . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
16.5.1 Using Peak-Performance Primitives . . . . . . . . . . . . . . . . . . . . . 210
16.5.2 UsingVertexArrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
16.5.3 UsingDisplayLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
16.5.4 Balancing Polygon Size and Pixel Operations . . . . . . . . . . . . . . . . 213
16.6 RenderingImagesEfficiently . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
16.7 TuningAnimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
16.7.1 FactorsContributingtoAnimationSpeed . . . . . . . . . . . . . . . . . . 214
16.7.2 OptimizingFrameRatePerformance . . . . . . . . . . . . . . . . . . . . 214
16.8 TakingTimingMeasurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
16.8.1 BenchmarkingBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
16.8.2 AchievingAccurateTimingMeasurements . . . . . . . . . . . . . . . . . 216
16.8.3 AchievingAccurateBenchmarkingResults . . . . . . . . . . . . . . . . . 217
17 Portability Considerations 218
17.1 GeneralConcerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
17.1.1 Handle Runtime Feature Availability Carefully . . . . . . . . . . . . . . . 218
17.1.2 ExtensionsandOpenGLVersioning . . . . . . . . . . . . . . . . . . . . . 219
17.1.3 Source Compatibility Across OpenGL SDKs . . . . . . . . . . . . . . . . 220
17.1.4 CharacterizePlatformPerformance . . . . . . . . . . . . . . . . . . . . . 220
17.2 Windows versus UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
17.3 3D Texture Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
18 List of Demo Programs 223
19 GLUT, the OpenGL Utility Toolkit 228
20 Equations 229
20.1 ProjectionMatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
20.1.1 PerspectiveProjection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
20.1.2 Orthographic Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
20.1.3 Perspective z-CoordinateTransformations . . . . . . . . . . . . . . . . . . 229
20.2 LightingEquations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20.2.1 AttenuationFactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20.2.2 SpotlightEffect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20.2.3 AmbientTerm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
20.2.4 DiffuseTerm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
20.2.5 SpecularTerm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
20.2.6 Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
21 References 233




No comments:

Post a Comment

Related Posts with Thumbnails

Put Your Ads Here!