Due date: Monday, December 1, 2003.
· Implement high performance rendering with both display lists and vertex array techniques. Please do an analysis for the following three cases:
· The happy Budda model with smooth shading
· The happy Budda model with smooth shading and marble procedural texture
· A shadow scene you used in lab3
For each of the three cases, is it fill-limited, geometry-limited or application-limited? Why? Please resolve all major performance bottlenecks with techniques described in our lecture in OpenGL performance issues.
Also, please report the best timing you can achieve with the smooth shaded Budda model, together with the rendering parameters you used, and compare with the rendering rates (#triangles/sec) advertised by the vendor. Analyze your results, and explain possible causes of the differences between your results and the vendor’s advertised results. Please note, often times, vendors report their triangle rendering rates rendered with connected primitives, such as triangle stripes. You are not asked to implement triangle-striping algorithms in this lab, but please keep this in mind when you perform the comparison.
§ In lieu of what is described in the above, if you don’t want to spend time crunching numbers, you can play with Cg shaders to implement a pixel shader program to achieve high gloss scene with a non-trivial BRDF
For this
part, please form 2-person teams to finish. Here is a hypothetical situation.
You and an MBA friend of yours co-founded a company. He is CEO, CFO and
President. You are CTO and chief of labor. The only other employee in your
company is a psychopath who maintains the code and server and knows where you,
your GF and parents live. Your product is a software package written in the
later half of the Year 2002 A.D. for a graduate level computer graphics
course, which you spent a Christmas break to expand. Your CEO decided to market
your product (gnuEgraphics.com) using feature based pricing. A sample feature
list you have include the following:
§ loading
geometry files in 10 different polygon mesh formats
§ loading
2D textures in 20 different file formats
§ loading
video (yeah, movies) textures in 5 different formats
§ loading
in description of procedural textures describing marble, water, cloud, smoke,
..
§ handle
time dependent geometric models, such as a dancing performer on an figure
skating competition
§ a
scene-graph editor with graphical user interface
§ an
interface to camera and lighting movement paths
§ rendering
the geometry in basic lighting and shading scenarios
§ rendering
the geometry with 2D textures, procedural textures, or video textures (you have
to efficiently manage your textures, say, for your scenes using on average 500
different textures per view)
§ rendering
special effects such as bump maps, gloss maps and BRDF (note, BRDF is view
dependent and light position dependent)
§ rendering
scenes with mirrors
§ rendering
shadows
§ efficient
rendering accelerations in hardware using display lists, and or, vertex arrays
(you have to build these structures first, right?)
§ efficient
rendering accelerations in software using occlusion culling, levels of detail,
...
§ antialiasing
Here is your challenge, you
guys sell source code as well as executable. When a customer orders a package
with a certain feature combination, say, a geometry viewer with video texture
(RGBA four channels), and shadows (where the shadows are cast onto a complex
geometry in colored and semi-transparent fashion). Your web server needs to get
all the related source code together and zip it up for downloading in 5 seconds.
Nothing but the ordered features should be included, however.
Note:
Please turn in a 3-page introduction to your overall design, illustrated with a block diagram, key data structure and pseudo code for major functional modules (no source code allowed!)
The
point of this exercise is to give each one of you a new angle to look at how
graphics rendering techniques and essentials fit into the same picture. Indeed,
no matter what your field of expertise is later on, a good understanding is
always the first step towards a successful design.