SGI Techpubs Library

IRIX 6.5  »  Books  »  Developer  »  
OpenGL Optimizer Programmer's Guide: An Open API for Large-Model Visualization
(document number: 007-2852-002 / published: 1998-06-09)    table of contents  |  additional info  |  download
find in page

About This Guide

OpenGL Optimizer is a C++ toolkit for CAD applications. It enables interactive, robust visualization of large model databases. OpenGL Optimizer provides the following tools:

  • High-quality surface representations, that is, topologically consistent, parametric definitions of surfaces

  • Tessellation

  • Simplification

  • Occlusion culling

  • Support for multiprocessor computing and advanced graphics hardware

This guide describes each individual tool and explores how they work together, and explores issues and tools relevant for developing large visualization programs using OpenGL Optimizer.

This is not a reference manual but a guide. For complete details about elements of the library, consult the man pages and header files, and look at the example applications.

Audience for This Guide

This book is intended for knowledgeable C and C++ CAD developers who understand the basic concepts of OpenGL and computer graphics.

To use OpenGL Optimizer effectively, you should also understand Cosmo3D. Cosmo 3D is a scene graph API built on top of OpenGL that speeds up and facilitates the process of creating complex graphics applications. Cosmo3D uses ideas from both Open Inventor and IRIS Performer, so many features may be familiar to users of these toolkits. See the Cosmo 3D Programmer's Guide.

OpenGL Optimizer allows developers to optimize a Cosmo3D scene graph. A complete OpenGL Optimizer application will therefore include Cosmo3D calls.

You will more easily understand the tools if you are familiar with scene graphs and higher-order geometric primitives, such as NURBS. You need not know techniques for large-model visualization, nor have more than a rudimentary knowledge of multi-processor techniques.

How to Use This Guide

The OpenGL Optimizer tools are modular without strong interdependencies. After familiarizing yourself with the topics in Part I, “Getting Started,” you should be able to read profitably about any topic you pick from the table of contents. Cross-references within discussions guide you to related material.

Not every feature in every header file is documented in this guide. Also, some elements presented may differ slightly from the header files, due to late changes in the software. For further information about a specific class, see the man page for that class, which will be in the form op*(3), where op* is an OpenGL Optimizer class.

All classes and functions in the OpenGL Optimizer library have names that begin with the characters op followed by a string beginning with an upper-case letter.

All classes and functions in the Cosmo3D library have names that begin with the characters cs followed by a string beginning with an uppercase letter. Consult the Cosmo 3D Programmer's Guide for more information about any object whose name begins with cs.

What This Guide Contains

This guide is divided into six parts and consists of seventeen chapters.

Part I, “Getting Started,” introduces OpenGL Optimizer by providing background information and discussing the basic components of a program.

Chapter 1, “OpenGL Optimizer Overview,”summarizes the challenges of large CAD visualization, characterizes in general terms the rendering task that the OpenGL Optimizer library facilitates, and surveys the tools OpenGL Optimizer provides to address bottlenecks at each stage of the graphics pipeline.

Chapter 2, “Basic I/O: Getting Started with OpenGL Optimizer,” introduces the main rendering tools and lists a minimal first program.

Part II, “High-Level Strategic Tools for Fast Rendering,” describes complete data processing methods for fast and coherent rendering of a large CAD database.

Chapter 3, “Sending Efficient Graphics Data to the Hardware,” discusses how to use display lists, vertex arrays, smaller vertex-data formats, connected geometric primitives.

Chapter 4, “Rendering Appropriate Levels of Detail,” discusses mesh simplifiers and a tool to insert level-of-detail nodes in the scene graph.

Chapter 5, “Culling Unneeded Objects From the Scene Graph,” discusses view-frustum culling, occlusion culling, and back-face culling.

Chapter 6, “Organizing the Scene Graph Spatially,” presents tools to reorganize the triangles in a scene graph to increase rendering speed.

Part III, “Specific Tools for Fast Rendering,” presents tools for two useful rendering tasks.

Chapter 7, “Interactive Highlighting and Manipulating,” describes how to interactively highlight and manipulate objects in a scene.

Chapter 8, “Efficient High-Quality Lighting Effects: Reflection Mapping,” presents good, approximate, fast lighting techniques, and techniques that provide very accurate lighting for reliable visual examination of model surfaces.

Part IV, “Managing and Rendering Higher-Order Geometric Primitives,” presents the set of tools for managing and rendering surfaces that are defined by mathematical equations.

Chapter 9, “Higher-Order Geometric Primitives and Discrete Meshes,” describes OpenGL Optimizer extensions to Cosmo3D geometric shapes,, for example, parametric surfaces and trimmed NURBS.

Chapter 10, “Creating and Maintaining Surface Topology,” describes tools to stitch together geometric primitives so that images do not have artificial cracks or breaks.

Chapter 11, “Rendering Higher-Order Primitives: Tessellators,” presents the tools you need to convert higher-order primitives into primitives that can be passed to the graphics hardware.

Part V, “Traversers, Low-Level Geometry Processing, and Multiprocessing,” describes tools that manipulate scene graph elements.

Chapter 12, “Traversing a Large Scene Graph,” describes tools that focus on scene-graph manipulations.

Chapter 13, “Manipulating Triangles and Rebuilding Renderable Objects,” describes the lower-level tools that perform the tasks discussed in Chapter 6.

Chapter 14, “Managing Multiple Processors,” describes the tools that allow you to easily manipulate a scene graph with several processors and coordinate manipulations of the scene graph.

Part VI, “Utilities and Troubleshooting,” describes tools and hints that are useful for developing OpenGL Optimizer applications.

Chapter 15, “Utilities,” presents several tools, such as error handlers and timers, to help polish an OpenGL Optimizer application.

Chapter 16, “Troubleshooting,” describes ways to avoid typical sticking points that occur when developing an OpenGL Optimizer application.

Part VII, “Appendices,”  five appendixes complement the material:

Appendix A, “Installing OpenGL Optimizer,” guides you through installing OpenGL Optimizer (UNIX and Windows) and explains environment variable settings (UNIX only).

Appendix B, “OpenGL Optimizer Sample Applications,” discusses the available sample applications.

Appendix C, “opviewer Sample Application,” explains how to use opviewer, a sample application that allows developers to view and manipulate scene graphs, and contains a commented listing of the code.

Appendix D, “Scene Graph Tuning With the opoptimize Application,” briefly explores how to use opoptimize, a sample application that allows developers to optimizer their own programs in batch processing mode, and contains a commented listing of the code.

Appendix E, “Optimizer Class Hierarchy,” lists the class hierarchies for opViewer, opXMViewer, and Optimizer.

This guide also includes a glossary and an index.

Recommended Background Reading

The following documents are useful as background reading or reference documentation:

Silicon Graphics Publications

Most Silicon Graphics publications are available online in the following locations:

  • IRIS InSight Library: from the Toolchest, choose Help > Online Books > SGI Developer and select the applicable manual.

  • Technical Publications Library: if you have access to the Internet, enter the following URL in your Web browser location window:
    http://techpubs.sgi.com/library/

The following documents are relevant for OpenGL Optimizer users:

  • Cosmo 3D Programmer's Guide (SGI_Developer bookshelf)

  • IRIS Performer Programming Guide (SGI_Developer bookshelf)

  • MIPS Compiling and Performance Tuning Guide (SGI_Developer bookshelf)
    For information on dynamically shared objects (DSOs)

  • OpenGL on Silicon Graphics Systems (SGI_Developer bookshelf)

Third-Party Publications

  • Farin, Gerald. Curves and Surface for Computer Aided Geometric Design. San Diego, Calif.: Academic Press, Inc., 1988.

  • D. Voorhies and J. Foran, “Reflection Vector Shading Hardware” in Computer Graphics Proceedings, Annual Conference Series, ACM, 1994.

  • The OpenGL WWW Center at http://www.opengl.org.

The following are all produced by Addison-Wesley Publishing:

  • Foley, J. D., A. vanDam, S. K. Feiner, and J. F. Hughes, Computer Graphics: Principles and Practice. 1990.

  • Gamma, E., R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, 1995.

  • Kilgard, M. J., Programming OpenGL for the X Window System, 1996. (Also known as “the Green book.”)

  • OpenGL Architecture Review Board, M. Woo, J. Neider, and T. Davis, OpenGL Programming Guide, Second Edition, 1997. (Also known as “the Red book.”)

  • OpenGL Architecture Review Board, Renate Kempf and Chris Frazier, editors. OpenGL Reference Manual, Second Edition. 1997. (Also known as “the Blue book.”)

  • Watt, A. and M. Watt, Advanced Animation and Rendering Techniques: Theory and Practice, 1992. Note Chapter 6, “Mapping Techniques: Texture and Environment Mapping.”

  • Wernecke, J., The Inventor Mentor: Programming Object-Oriented 3D Graphics with Open Inventor, 1994.

  • Wernecke, J., The Inventor Toolmaker, 1994.

Conventions Used in This Guide

These type conventions and symbols are used in this guide:

Bold 

C++ class names, C++ member functions, C++ data members, and function names.

Italics 

Filenames, manual/book titles, new terms, and variables.

Fixed-width type 


Code.

Bold fixed-width type 


User input.

ALL CAPS 

Environment variables, defined constants.

() (Bold Parentheses) 


Follow function names. They surround function arguments if needed for the discussion or are empty if not needed in a particular context.

OpenGL Optimizer Programmer's Guide: An Open API for Large-Model Visualization
(document number: 007-2852-002 / published: 1998-06-09)    table of contents  |  additional info  |  download

    Front Matter
    About This Guide
    Part I. Getting Started
    Part II. High-Level Strategic Tools for Fast Rendering
    Part III. Specific Tools for Fast Rendering
    Part IV. Managing and Rendering Higher-Order Geometric Primitives
    Part V. Traversers, Low-Level Geometry Processing, and Multiprocessing
    Part VI. Utilities and Troubleshooting
    Part VII. Appendices
    Glossary
    Index


home/search | what's new | help