Download - OpenGL: Advanced 3D
![Page 1: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/1.jpg)
OpenGL:Advanced 3D
Session 513
![Page 2: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/2.jpg)
OpenGL:Advanced 3D
Geoff StahlApple OpenGL
Simon GreenNVIDIA
![Page 3: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/3.jpg)
Overview•What’s new with Jaguar?•Wolfman Walkthrough•Q&A
![Page 4: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/4.jpg)
New Features•Optimizations
• glReadPixels• glCopyTexSubImage• glDrawPixels• Display Lists• Image Processing• Vertex Arrays
•Surface to Texture•Extensions
• 64 extensions supported• 30 new extensions
![Page 5: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/5.jpg)
Programmability• ARB_vertex_program
• Adds vertex programming functionality to allsoftware and hardware implementations
• Support in hardware for ATI Radeon 8500,NVIDIA GeForce 3 and GeForce 4 Ti
• All other hardware supported via anoptimized software implementation
• NV_texture_shader, NV_texture_shader2, NV_texture_shader3
• ATI_fragment_program
![Page 6: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/6.jpg)
Vertex Array• APPLE_vertex_array_range
• Allows GPU to DMA vertex arrays• Supported by ATI Radeon, ATI Radeon 8500,
all NVIDIA. Requires hardware TCL• APPLE_vertex_array_object
• Allows vertex array state such as data pointersand vertex array range information, similarto how textures are handled
• Supported by ATI Radeon, ATI Radeon 8500,all NVIDIA
![Page 7: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/7.jpg)
Performance• APPLE_texture_range
• Allows texture storage hints and specificationof memory range for texture data
• Supported by ATI Radeon, ATI Radeon 8500,all NVIDIA
• APPLE_fence
• Puts a fence (or token) in command streamto allow synchronization
• All renderers supported
![Page 8: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/8.jpg)
Texture Extensions• ARB_texture_mirrored_repeat
• ARB_texture_env_crossbar
• ATI_texture_mirror_once
• SGIX_depth_texture
• SGIX_shadow
![Page 9: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/9.jpg)
Rendering Extensions• ARB_multisample
• EXT_secondary_color
• EXT_fog_coord
• EXT_draw_range_elements
• EXT_stencil_wrap
• NV_fog_distance
• NV_multisample_filter_hint
• NV_depth_clamp
![Page 10: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/10.jpg)
Others•Pixel Transfer
• ARB_imaging, ATI_blend_equation_separate, ATI_blend_weighted_minmax, NV_blend_square
•Point Parameters• ARB_point_parameters, NV_point_sprite
![Page 11: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/11.jpg)
Anatomyof theWolfman
Advanced Fur Rendering UsingOpenGL Programmable Shading
Simon Green, NVIDIA
![Page 12: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/12.jpg)
NVIDIA Demo Team Unofficial Motto
“We Make The Marketing Lies Come True”
![Page 13: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/13.jpg)
Overview•Wolfman—one of four GeForce 4 launch demos•Created to showcase the performance and
programmability of GeForce 4•Demonstrates volumetric fur rendering on a fully
animated character model•Animated using vertex shaders•Per-pixel anisotropic lighting using pixel shaders•Self-shadowing using shadows maps•Runs using OpenGL with NVIDIA extensions•How did we do it?
![Page 14: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/14.jpg)
Why Fur?•Lots of things in the real world are fuzzy•Rendering fur is hard•Fur is something people hadn’t seen
before in real time
![Page 15: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/15.jpg)
Rendering Fur•Two basic methods to render fur
• Geometric• Each individual hair strand is a curve (lines)
• Volumetric• Fur is represented using volume texture (images)
•Hardware can’t render 3 million individual hairsper frame (yet)
•So we use the second method
![Page 16: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/16.jpg)
A Brief History of Fur RenderingRendering Fur With Three Dimensional Textures
Kajiya and Kay, Siggraph 1989•Represented fur density using 3D volume
texture —“texels”•Lit hairs based on tangent direction•Furry teddy bear image•Rendered on network of IBM mainframes
• 16 processors•2 hours for one frame
![Page 17: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/17.jpg)
![Page 18: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/18.jpg)
A Brief History of Fur RenderingReal-Time Fur Over Arbitrary Surfaces
Jed Lengyel, Microsoft Research 2001•Introduced concept of “shell and fin” rendering•Concentric shells approximate volume•“Fins” improve silhouette edges•Used “lapped textures” to cover surface•Furry bunny rabbit•5000 faces•Ran at 12 frames per second on GeForce DDR
![Page 19: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/19.jpg)
![Page 20: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/20.jpg)
Demo Concept•Teddy Bears and Bunnies aren’t our style, so…
![Page 21: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/21.jpg)
![Page 22: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/22.jpg)
DemoNVIDIA Wolfman
![Page 23: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/23.jpg)
Wolfman Demo Statistics•100,000 polygons/frame•Runs at around 30 frames/second
![Page 24: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/24.jpg)
Rendering FurWith Shells and Fins•Generate concentric “shells’ by scaling base skin
mesh along vertex normal•Each shell is textured with a different 2D texture
that represents a slice of the fur geometry•The layers are blended together to produce
the illusion of a semi-transparent furry volume•Lower layers are shaded darker to simulate
self-shadowing of fur•We used 8 layers
![Page 25: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/25.jpg)
Fur Design Tool
![Page 26: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/26.jpg)
Fur Design Tool•Custom in-house tool•Provides simple UI for designing fur textures•Fur geometry is defined using a particle system
based on spherical coordinates•Previews hairs using line strips•Allows direction, curliness to be tweaked
using sliders•Once you’re happy, it renders (e.g., voxelizes)
the geometry into a volume texture•Writes out texture files to disk
![Page 27: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/27.jpg)
Fur Textures•We used 256 x 256 pixel fur textures, tiled over
each surface•Alpha component of texture represents
density of fur•RGB components represent tangent vector
used for lighting
![Page 28: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/28.jpg)
Fur Without Color Map
![Page 29: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/29.jpg)
Fur Color Texture
![Page 30: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/30.jpg)
Fur With Color and Lighting
![Page 31: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/31.jpg)
Rendering FurWith Shells and Fins•Problem: fur using shells looks good, except
on the silhouette•Solution: add “fin” geometry to improve the edges•Fins are generated by creating a quadrangle for
each edge in the base mesh•Textured with a separate image•Fins are faded out based on the angle between the
normal and the view direction, so that they onlyappear on the silhouette
![Page 32: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/32.jpg)
Fin Texture•Hand painted, represents arbitrary cross section
through fur:
![Page 33: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/33.jpg)
![Page 34: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/34.jpg)
![Page 35: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/35.jpg)
![Page 36: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/36.jpg)
![Page 37: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/37.jpg)
Modeling and Animation•Modeled in Maya as NURB surfaces•Converted to polygons•Base mesh has around 20,000 polygons total•Skeleton has 61 bones
• Including all fingers and thumbs!•Comparable to complexity used in film and
television production•925 frames of key-framed animation @ 30fps
![Page 38: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/38.jpg)
Wolfman in Maya 4.0
![Page 39: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/39.jpg)
NVDemo—The NVIDIA Demo Engine
•Proprietary NVIDIA demo engine•Used for most of NVIDIA’s in-house demos•Object-oriented scene graph library•Takes care of scene management, culling, sorting•Includes Maya plug-in to convert geometry,
materials, lights and animation to our owncustom file format
![Page 40: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/40.jpg)
Vertex Shaders•Allow total control over hardware vertex
processing using assembly language interface•Exposed in OpenGL as ARB_vertex_program
extension•Used in Wolfman demo for:
• Skinned animation• Scaling fur layers along vertex normal• Setup for per-pixel lighting• Texture coordinate generation for
shadow mapping
![Page 41: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/41.jpg)
Vertex Program Extract// Load the index
ARL A0.x, v[V_INDEX].x;
// transform vertex by bone
DP4 R0.x, c[A0.x + C_BONE0_X], v[V_COORD];
DP4 R0.y, c[A0.x + C_BONE0_Y], v[V_COORD];
DP4 R0.z, c[A0.x + C_BONE0_Z], v[V_COORD];
// multiply by weight
MUL Rv.xyz, R0, v[V_WEIGHT].x;
// transform normal by bone
DP3 R0.x, c[A0.x + C_BONE0_X], v[V_NORMAL];
DP3 R0.y, c[A0.x + C_BONE0_Y], v[V_NORMAL];
DP3 R0.z, c[A0.x + C_BONE0_Z], v[V_NORMAL];
// multiply by weight
MUL Rn.xyz, R0, v[V_WEIGHT].x;
// repeat for each bone, plus binormals
![Page 42: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/42.jpg)
Vertex Program Extract// scale vertex along normal
MAD Rv.xyz, Rn, c[C_FUR_SHELL_SCALE].x, Rv;
// project vertex
DP4 o[HPOS].x, c[C_PROJECTION_X], Rv;
DP4 o[HPOS].y, c[C_PROJECTION_Y], Rv;
DP4 o[HPOS].z, c[C_PROJECTION_Z], Rv;
DP4 o[HPOS].w, c[C_PROJECTION_W], Rv;
// fur lighting
// calculate eye space view vector
DP3 Re.w, Rv, Rv;
RSQ Re.w, Re.w;
MUL Re.xyz, Rv, Re.w;
![Page 43: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/43.jpg)
Vertex Program Extract// calculate eye space half-angle vector
ADD Rh, -Re, c[C_LIGHT0_DIRECTION];
DP3 Rh.w, Rh, Rh;
RSQ Rh.w, Rh.w;
MUL Rh.xyz, Rh, Rh.w;
// transform half-angle into tangent space
DP3 R0.x, -Rt, Rh;
DP3 R0.y, -Rb, Rh;
DP3 R0.z, Rn, Rh;
// map H into [0,1] and put into secondary color
MAD o[COL1].xyz, R0, c[C_CONSTANTS].y, c[C_CONSTANTS].y;
// put fur diffuse lighting with attenuation into primary color
DP3 R0, Rn, c[C_LIGHT0_DIRECTION];
MUL o[COL0].xyz, c[C_FUR_SHELL_SCALE].y, R0;
![Page 44: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/44.jpg)
Skinning•We want a smooth skin that covers the character and
deforms as it animates•Storing all the vertices for each key frame would be
expensive•Instead we animate a hierarchical skeleton, and use that
to deform the skin•Transform each vertex by multiple transformations—one
for each of the nearby bones•Final vertex position is a weighted average of the results
of each of these transformations•Weights are stored with each vertex•Debugging skinning code can be fun…
![Page 45: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/45.jpg)
![Page 46: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/46.jpg)
![Page 47: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/47.jpg)
Pixel Shaders•Allow precise control over per-pixel operations•Exposed in OpenGL as NV_texture_shader
and NV_register_combiners extensions•Used in Wolfman demo for:
• Bump mapping (street and Wolfman’s skin)• Anisotropic lighting model on fur• Shadows
![Page 48: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/48.jpg)
Shadows•Everything in the demo is shadowed using
shadow maps•Shadow maps are a two pass image-space technique•Exposed via GL_ARB_shadow extension
•Advantages• Performance is linear with complexity of scene• Easy to implement
•Disadvantages• Aliasing• Shadow bias
![Page 49: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/49.jpg)
Shadow Map Algorithm•Render scene from light’s point of view•Copy depth information to “shadow map” texture•Project shadow map texture back onto scene•For each pixel, hardware compares depth in
shadow map with depth of pixel:• If it’s less, there must be something between
us and the light shadowed• If it’s roughly equal, point is visible from light
![Page 50: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/50.jpg)
Bump Map Pixel Shader Pseudo Code// NV_register_combiner pseudo code for bump mapping
texture0: color map (alpha = shininess map)
texture1: bump map
texture2: Phong specular map
texture3: shadow map
primary: light direction (L)
secondary: half angle vector (H)
// diffuse lighting = N.L
reg0.rgb = primary . texture1
// calculate shadow factor
reg1.alpha = texture3*(1.0 - factor) + factor;// diffuse * color mapreg0.rgb = reg0 * texture0
![Page 51: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/51.jpg)
Bump Map Pixel Shader Pseudo Code// specular * shininessreg0.alpha = texture2 * texture0.alpha
// shadowing// diffuse*shadow_factor + specular*shadowreg0.rgb = reg0*reg1.alpha + reg0.alpha*texture3
// fogreg0.rgb = interp(reg0, fog_color, fog_factor);
// NV_texture_shader psuedo codetexture_2D();texture_2D();dot_product_texture_1D(tex1); // computes (N.H)^ptexture_2D();
![Page 52: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/52.jpg)
Texture–Color Map
![Page 53: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/53.jpg)
Texture–Shininess Map
![Page 54: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/54.jpg)
Texture–Normal (Bump) Map
![Page 55: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/55.jpg)
Final Result
![Page 56: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/56.jpg)
Future Work•Fur dynamics
• Animate shell geometry independentlyfrom model based on physical simulation
•Ray marching• Blend layers inside pixel shader• Produce illusion of depth without shells• Reduces frame buffer blending
•Geometry-based fur• Antialiasing and shadowing are hard
![Page 57: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/57.jpg)
Summary•Programmable Vertex and Pixel shaders allow
you to control the hardware•Real-time and offline production rendering
are converging•Programmable graphics hardware acceleration
is applicable not only to games, but 2D imaging,video processing and user interfaces…
•Next generation hardware will be faster, andeven more programmable
•Start learning this stuff now!
![Page 58: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/58.jpg)
Demo Credits•Curtis Beeson, Joe Demers—Engine Code•Daniel Hornick—Modelling and Texturing•Jeff Bell—Character Animation•Ken Kurita-Ditz—Sound Design•Simon Green—Additional Code and Shaders•Mark Daly—Producer
![Page 59: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/59.jpg)
![Page 60: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/60.jpg)
References•J. Kajiya and T. Kay, Rendering fur with three
dimensional textures, SIGGRAPH Proceedings,pp. 271–280, 1989
•Jerome Lengyel, Emil Praun, Adam Finkelstein, HuguesHoppe, Real-Time Fur over Arbitrary Surfaces, ACM2001 Symposium on Interactive 3D Graphics
http://research.microsoft.com/~jedl/
http://developer.nvidia.com/view.asp?IO=nvidia_opengl_specs
![Page 61: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/61.jpg)
RoadmapRoom J
Thur., 5:00pmRoom J
Thur., 5:00pm
Room J1Fri., 5:00pm
Room J1Fri., 5:00pm
514 OpenGL: Performanceand Optimization
FF018 Graphics and Imaging
![Page 62: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/62.jpg)
Who to ContactSimon GreenNVIDIA Demo [email protected]
Sergio Mello3D Graphics Technology [email protected]
http://developer.apple.com/wwdc2002/urls.html
![Page 63: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/63.jpg)
Q&A
Sergio Mello3D Graphics Technology Manager Worldwide Developer Relations
http://developer.apple.com/wwdc2002/urls.html
![Page 64: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/64.jpg)
© 2001 and TM Apple Computer, Inc. All rights reserved.
![Page 65: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/65.jpg)
© 2001 and TM Apple Computer, Inc. All rights reserved.
![Page 66: OpenGL: Advanced 3D](https://reader031.vdocuments.site/reader031/viewer/2022012505/6180fa1fe5e45e2b706ba46b/html5/thumbnails/66.jpg)
© 2001 and TM Apple Computer, Inc. All rights reserved.