diff --git a/index.html b/index.html index ccbff56..65e5c69 100644 --- a/index.html +++ b/index.html @@ -13,6 +13,12 @@ Michael Abrash's Graphics Programming Black Book Special Edition: Table of Contents + @@ -21,2052 +27,2049 @@
-
-
Introduction
+
    +
  1. Introduction
  2. -
    Foreword
    +
  3. Foreword
  4. -
    About the Author
    -
    +
  5. About the Author
  6. -
    - Part I +
  7. + Part I -
    -
    - Chapter 1—The Best Optimizer Is between Your Ears +
      +
    1. + Chapter 1—The Best Optimizer Is between Your Ears -
      -
      The Human Element of Code Optimization
      + +
    2. -
      - Where We’ve Been, What We’ve Seen +
    3. + Where We’ve Been, What We’ve Seen -
      -
      Where We’re Going
      -
      -
    4. -
    -
  8. + + + + -
    - Chapter 2—A World Apart +
  9. + Chapter 2—A World Apart -
    -
    The Unique Nature of Assembly Language Optimization
    + +
  10. -
    - The Flexible Mind +
  11. + The Flexible Mind -
    -
    Where to Begin?
    -
    -
  12. -
- + + + + -
- Chapter 3—Assume Nothing +
  • + Chapter 3—Assume Nothing -
    -
    Understanding and Using the Zen Timer
    + +
  • -
    Time and the PC
    +
  • Time and the PC
  • -
    Stopping the Zen Timer
    +
  • Stopping the Zen Timer
  • -
    Reporting Timing Results
    +
  • Reporting Timing Results
  • -
    Notes on the Zen Timer
    +
  • Notes on the Zen Timer
  • -
    A Sample Use of the Zen Timer
    +
  • A Sample Use of the Zen Timer
  • -
    - The Long-Period Zen Timer +
  • + The Long-Period Zen Timer -
    -
    Stopping the Clock
    -
    -
  • + + -
    Example Use of the Long-Period Zen Timer
    +
  • Example Use of the Long-Period Zen Timer
  • -
    - Using the Zen Timer from C +
  • + Using the Zen Timer from C -
    -
    Watch Out for Optimizing Assemblers!
    +
    -
  • - - +
  • Armed with the Zen Timer, Onward and Upward
  • + + + + -
    - Chapter 4—In the Lair of the Cycle-Eaters +
  • + Chapter 4—In the Lair of the Cycle-Eaters -
    -
    How the PC Hardware Devours Code Performance
    + +
  • -
    - The Prefetch Queue Cycle-Eater +
  • + The Prefetch Queue Cycle-Eater -
    -
    Official Execution Times Are Only Part of the Story
    +
    -
  • +
  • Holding Up the 8088
  • + + -
    - Dynamic RAM Refresh: The Invisible Hand +
  • + Dynamic RAM Refresh: The Invisible Hand -
    -
    How DRAM Refresh Works in the PC
    +
    -
  • +
  • What to Do About the DRAM Refresh Cycle-Eater?
  • + + -
    Wait States
    +
  • Wait States
  • -
    - The Display Adapter Cycle-Eater +
  • + The Display Adapter Cycle-Eater -
    -
    The Impact of the Display Adapter Cycle-Eater
    +
    -
  • - - +
  • What Does It All Mean?
  • + + + + -
    - Chapter 5—Crossing the Border +
  • + Chapter 5—Crossing the Border -
    -
    - Searching Files with Restartable Blocks +
    + +
  • -
    Avoiding the String Trap
    +
  • Avoiding the String Trap
  • -
    Brute-Force Techniques
    +
  • Brute-Force Techniques
  • -
    - Using memchr() +
  • + Using memchr() -
    -
    Making a Search Restartable
    -
    -
  • + + -
    - Interpreting Where the Cycles Go +
  • + Interpreting Where the Cycles Go -
    -
    Knowing When Assembly Is Pointless
    -
    -
  • + + -
    Always Look Where Execution Is Going
    - - +
  • Always Look Where Execution Is Going
  • + + -
    - Chapter 6—Looking Past Face Value +
  • + Chapter 6—Looking Past Face Value -
    -
    - How Machine Instructions May Do More Than You Think +
    + +
  • -
    - Math via Memory Addressing +
  • + Math via Memory Addressing -
    -
    The Wonders of LEA on the 386
    -
    -
  • + + -
    Multiplication with LEA Using Non-Powers of Two
    - - +
  • Multiplication with LEA Using Non-Powers of Two
  • + + -
    - Chapter 7—Local Optimization +
  • + Chapter 7—Local Optimization -
    -
    - Optimizing Halfway between Algorithms and Cycle Counting +
    + +
  • -
    - The Lessons of LOOP and JCXZ +
  • + The Lessons of LOOP and JCXZ -
    -
    Avoiding LOOPS of Any Stripe
    -
    -
  • + + -
    Local Optimization
    +
  • Local Optimization
  • -
    - Unrolling Loops +
  • + Unrolling Loops -
    -
    Rotating and Shifting with Tables
    +
    -
  • - - +
  • Incrementing with and without Carry
  • + + + + -
    - Chapter 8—Speeding Up C with Assembly Language +
  • + Chapter 8—Speeding Up C with Assembly Language -
    -
    - Jumping Languages When You Know It’ll Help +
    + +
  • -
    Don’t Call Your Functions on Me, Baby
    +
  • Don’t Call Your Functions on Me, Baby
  • -
    Stack Frames Slow So Much
    +
  • Stack Frames Slow So Much
  • -
    - Torn Between Two Segments +
  • + Torn Between Two Segments -
    -
    Why Speeding Up Is Hard to Do
    -
    -
  • + + -
    - Taking It to the Limit +
  • + Taking It to the Limit -
    -
    A C-to-Assembly Case Study
    -
    -
  • - - + + + + -
    - Chapter 9—Hints My Readers Gave Me +
  • + Chapter 9—Hints My Readers Gave Me -
    -
    - Optimization Odds and Ends from the Field +
    -
    -
  • +
  • Setting 32-Bit Registers: Time versus Space
  • + + + + -
    - Chapter 10—Patient Coding, Faster Code +
  • + Chapter 10—Patient Coding, Faster Code -
    -
    - How Working Quickly Can Bring Execution to a Crawl +
    + +
  • -
    - The Brute-Force Syndrome +
  • + The Brute-Force Syndrome -
    -
    Wasted Breakthroughs
    -
    -
  • + + -
    - Recursion +
  • + Recursion -
    -
    Patient Optimization
    -
    -
  • - - + + + + -
    - Chapter 11—Pushing the 286 and 386 +
  • + Chapter 11—Pushing the 286 and 386 -
    -
    - New Registers, New Instructions, New Timings, New Complications + +
  • -
    New Instructions and Features: The 286
    +
  • New Instructions and Features: The 286
  • -
    - New Instructions and Features: The 386 +
  • + New Instructions and Features: The 386 -
    -
    Optimization Rules: The More Things Change...
    +
    -
  • +
  • Detailed Optimization
  • + + -
    POPF and the 286
    - - - - +
  • POPF and the 286
  • + + + + -
    - Chapter 12—Pushing the 486 +
  • + Chapter 12—Pushing the 486 -
    -
    - It’s Not Just a Bigger 386 +
    + +
  • -
    - Rules to Optimize By +
  • + Rules to Optimize By -
    -
    The Hazards of Indexed Addressing
    +
    -
  • +
  • Calculate Memory Pointers Ahead of Time
  • + + -
    - Caveat Programmor +
  • + Caveat Programmor -
    -
    Stack Addressing and Address Pipelining
    +
    -
  • +
  • Timing Your Own 486 Code
  • + + -
    The Story Continues
    - - +
  • The Story Continues
  • + + -
    - Chapter 13—Aiming the 486 +
  • + Chapter 13—Aiming the 486 -
    -
    - Pipelines and Other Hazards of the High End +
    + +
  • -
    BSWAP: More Useful Than You Might Think
    +
  • BSWAP: More Useful Than You Might Think
  • -
    Pushing and Popping Memory
    +
  • Pushing and Popping Memory
  • -
    Optimal 1-Bit Shifts and Rotates
    +
  • Optimal 1-Bit Shifts and Rotates
  • -
    32-Bit Addressing Modes
    - - +
  • 32-Bit Addressing Modes
  • + + -
    - Chapter 14—Boyer-Moore String Searching +
  • + Chapter 14—Boyer-Moore String Searching -
    -
    Optimizing a Pretty Optimum Search Algorithm
    +
    -
  • +
  • Know What You Know
  • + + -
    - Chapter 15—Linked Lists and plain Unintended Challenges +
  • + Chapter 15—Linked Lists and plain Unintended Challenges -
    -
    Unfamiliar Problems with Familiar Data Structures
    +
    -
  • +
  • Hi/Lo in 24 Bytes
  • + + -
    - Chapter 16—There Ain’t No Such Thing as the Fastest Code +
  • + Chapter 16—There Ain’t No Such Thing as the Fastest Code -
    -
    Lessons Learned in the Pursuit of the Ultimate Word Counter
    + +
  • -
    The Astonishment of Right-Brain Optimization
    +
  • The Astonishment of Right-Brain Optimization
  • -
    - Levels of Optimization +
  • + Levels of Optimization -
    -
    Optimization Level 1: Good Code
    -
    -
  • + + -
    - Level 2: A New Perspective +
  • + Level 2: A New Perspective -
    -
    Level 3: Breakthrough
    +
    -
  • - - +
  • Enough Word Counting Already!
  • + + + + -
    - Chapter 17—The Game of Life +
  • + Chapter 17—The Game of Life -
    -
    The Triumph of Algorithmic Optimization in a Cellular Automata Game
    +
    -
  • +
  • The Challenge That Ate My Life
  • + + + + -
    - Chapter 18—It’s a plain Wonderful Life +
  • + Chapter 18—It’s a plain Wonderful Life -
    -
    Optimization beyond the Pale
    +
    -
  • + + + + -
    - Chapter 19—Pentium: Not the Same Old Song +
  • + Chapter 19—Pentium: Not the Same Old Song -
    -
    Learning a Whole Different Set of Optimization Rules
    + +
  • -
    Faster Addressing and More
    +
  • Faster Addressing and More
  • -
    Branch Prediction
    +
  • Branch Prediction
  • -
    - Miscellaneous Pentium Topics +
  • + Miscellaneous Pentium Topics -
    -
    486 versus Pentium Optimization
    +
    -
  • - - +
  • Going Superscalar
  • + + + + -
    - Chapter 20—Pentium Rules +
  • + Chapter 20—Pentium Rules -
    -
    How Your Carbon-Based Optimizer Can Put the “Super” in Superscalar
    +
    -
  • + + + + -
    - Chapter 21—Unleashing the Pentium’s V-Pipe +
  • + Chapter 21—Unleashing the Pentium’s V-Pipe -
    -
    Focusing on Keeping Both Pentium Pipes Full
    +
    -
  • + + + + -
    - Chapter 22—Zenning and the Flexible Mind +
  • + Chapter 22—Zenning and the Flexible Mind -
    -
    Taking a Spin through What You’ve Learned
    +
    -
  • -
    - +
  • Zenning
  • + + + + -
    - Part II +
  • + Part II -
    -
    - Chapter 23—Bones and Sinew +
      +
    1. + Chapter 23—Bones and Sinew -
      -
      At the Very Heart of Standard PC Graphics
      + +
    2. -
      The Hazards of VGA Clones
      +
    3. The Hazards of VGA Clones
    4. -
      Just the Beginning
      +
    5. Just the Beginning
    6. -
      The Macro Assembler
      -
    -
  • +
  • The Macro Assembler
  • + + -
    - Chapter 24—Parallel Processing with the VGA +
  • + Chapter 24—Parallel Processing with the VGA -
    -
    Taking on Graphics Memory Four Bytes at a Time
    +
    -
  • +
  • Notes on the ALU/Latch Demo Program
  • + + -
    - Chapter 25—VGA Data Machinery +
  • + Chapter 25—VGA Data Machinery -
    -
    The Barrel Shifter, Bit Mask, and Set/Reset Mechanisms
    + +
  • -
    Notes on Set/Reset
    +
  • Notes on Set/Reset
  • -
    A Brief Note on Word OUTs
    - - +
  • A Brief Note on Word OUTs
  • + + -
    - Chapter 26—VGA Write Mode 3 +
  • + Chapter 26—VGA Write Mode 3 -
    -
    The Write Mode That Grows on You
    +
    -
  • +
  • A Note on Preserving Register Bits
  • + + -
    - Chapter 27—Yet Another VGA Write Mode +
  • + Chapter 27—Yet Another VGA Write Mode -
    -
    Write Mode 2, Chunky Bitmaps,and Text-Graphics Coexistence
    + +
  • -
    When to Use Write Mode 2 and When to Use Set/Reset
    +
  • When to Use Write Mode 2 and When to Use Set/Reset
  • -
    Mode 13H—320x200 with 256 Colors
    +
  • Mode 13H—320x200 with 256 Colors
  • -
    Flipping Pages from Text to Graphics and Back
    - - +
  • Flipping Pages from Text to Graphics and Back
  • + + -
    - Chapter 28—Reading VGA Memory +
  • + Chapter 28—Reading VGA Memory -
    -
    Read Modes 0 and 1, and the Color Don’t Care Register
    +
    -
  • +
  • When all Planes “Don’t Care”
  • + + -
    - Chapter 29—Saving Screens and Other VGA Mysteries +
  • + Chapter 29—Saving Screens and Other VGA Mysteries -
    -
    Useful Nuggets from the VGA Zen File
    +
    -
  • +
  • Modifying VGA Registers
  • + + -
    - Chapter 30—Video Est Omnis Divisa +
  • + Chapter 30—Video Est Omnis Divisa -
    -
    The Joys and Galling Problems of Using Split Screens on the EGA and VGA
    + +
  • -
    Setting the Split-Screen-Related Registers
    +
  • Setting the Split-Screen-Related Registers
  • -
    The Problem with the EGA Split Screen
    +
  • The Problem with the EGA Split Screen
  • -
    - Split Screen and Panning +
  • + Split Screen and Panning -
    -
    The Split Screen and Horizontal Panning: An Example
    -
    -
  • + + -
    Notes on Setting and Reading Registers
    +
  • Notes on Setting and Reading Registers
  • -
    Split Screens in Other Modes
    +
  • Split Screens in Other Modes
  • -
    How Safe?
    - - +
  • How Safe?
  • + + -
    - Chapter 31—Higher 256-Color Resolution on the VGA +
  • + Chapter 31—Higher 256-Color Resolution on the VGA -
    -
    When Is 320x200 Really 320x400?
    + +
  • -
    Two 256-Color Pages
    +
  • Two 256-Color Pages
  • -
    Something to Think About
    - - +
  • Something to Think About
  • + + -
    - Chapter 32—Be It Resolved: 360x480 +
  • + Chapter 32—Be It Resolved: 360x480 -
    -
    Taking 256-Color Modes About as Far as the Standard VGA Can Take Them
    +
    -
  • +
  • Accessing Display Memory in 360x480 256-Color Mode
  • + + + + -
    - Chapter 33—Yogi Bear and Eurythmics Confront VGA Colors +
  • + Chapter 33—Yogi Bear and Eurythmics Confront VGA Colors -
    -
    The Basics of VGA Color Generation
    + +
  • -
    If You Can’t Call the BIOS, Who Ya Gonna Call?
    +
  • If You Can’t Call the BIOS, Who Ya Gonna Call?
  • -
    An Example of Setting the DAC
    - - +
  • An Example of Setting the DAC
  • + + -
    - Chapter 34—Changing Colors without Writing Pixels +
  • + Chapter 34—Changing Colors without Writing Pixels -
    -
    Special Effects through Realtime Manipulation of DAC Colors
    + +
  • -
    A Test Program for Color Cycling
    +
  • A Test Program for Color Cycling
  • -
    Color Cycling Approaches that Work
    +
  • Color Cycling Approaches that Work
  • -
    - Odds and Ends +
  • + Odds and Ends -
    -
    The DAC Mask
    +
    -
  • - - +
  • Cycling Down
  • + + + + -
    - Chapter 35—Bresenham Is Fast, and Fast Is Good +
  • + Chapter 35—Bresenham Is Fast, and Fast Is Good -
    -
    Implementing and Optimizing Bresenham’s Line-Drawing Algorithm
    + +
  • -
    Comments on the C Implementation
    +
  • Comments on the C Implementation
  • -
    Bresenham’s Algorithm in Assembly
    - - +
  • Bresenham’s Algorithm in Assembly
  • + + -
    - Chapter 36—The Good, the Bad, and the Run-Sliced +
  • + Chapter 36—The Good, the Bad, and the Run-Sliced -
    -
    Faster Bresenham Lines with Run-Length Slice Line Drawing
    +
    -
  • +
  • Run-Length Slice Details
  • + + -
    - Chapter 37—Dead Cats and Lightning Lines +
  • + Chapter 37—Dead Cats and Lightning Lines -
    -
    Optimizing Run-Length Slice Line Drawing in a Major Way
    +
    -
  • +
  • Further Optimizations
  • + + + + -
    - Chapter 38—The Polygon Primeval +
  • + Chapter 38—The Polygon Primeval -
    -
    Drawing Polygons Efficiently and Quickly
    + +
  • -
    Filling Non-Overlapping Convex Polygons
    +
  • Filling Non-Overlapping Convex Polygons
  • -
    Oddball Cases
    - - +
  • Oddball Cases
  • + + -
    - Chapter 39—Fast Convex Polygons +
  • + Chapter 39—Fast Convex Polygons -
    -
    Filling Polygons in a Hurry
    + +
  • -
    - The Finishing Touch: Assembly Language +
  • + The Finishing Touch: Assembly Language -
    -
    Maximizing REP STOS
    -
    -
  • + + -
    Faster Edge Tracing
    - - +
  • Faster Edge Tracing
  • + + -
    - Chapter 40—Of Songs, Taxes, and the Simplicity of Complex Polygons +
  • + Chapter 40—Of Songs, Taxes, and the Simplicity of Complex Polygons -
    -
    Dealing with Irregular Polygonal Areas
    + +
  • -
    - Nonconvex Polygons +
  • + Nonconvex Polygons -
    -
    Details, Details
    -
    -
  • - - + + + + -
    - Chapter 41—Those Way-Down Polygon Nomenclature Blues +
  • + Chapter 41—Those Way-Down Polygon Nomenclature Blues -
    -
    Names Do Matter when You Conceptualize a Data Structure
    +
    -
  • +
  • Nomenclature in Action
  • + + -
    - Chapter 42—Wu’ed in Haste; Fried, Stewed at Leisure +
  • + Chapter 42—Wu’ed in Haste; Fried, Stewed at Leisure -
    -
    Fast Antialiased Lines Using Wu’s Algorithm
    +
    -
  • + + + + -
    - Chapter 43—Bit-Plane Animation +
  • + Chapter 43—Bit-Plane Animation -
    -
    A Simple and Extremely Fast Animation Method for Limited Color
    +
    -
  • +
  • Beating the Odds in the Jaw-Dropping Contest
  • + + -
    - Chapter 44—Split Screens Save the Page Flipped Day +
  • + Chapter 44—Split Screens Save the Page Flipped Day -
    -
    - 640x480 Page Flipped Animation in 64K...Almost +
    -
  • - - +
  • Enter the Split Screen
  • + + + + -
    - Chapter 45—Dog Hair and Dirty Rectangles +
  • + Chapter 45—Dog Hair and Dirty Rectangles -
    -
    Different Angles on Animation
    +
    -
  • +
  • Another Interesting Twist on Page Flipping
  • + + -
    - Chapter 46—Who Was that Masked Image? +
  • + Chapter 46—Who Was that Masked Image? -
    -
    - Optimizing Dirty-Rectangle Animation +
    -
    -
  • +
  • Drawing Order and Visual Quality
  • + + + + -
    - Chapter 47—Mode X: 256-Color VGA Magic +
  • + Chapter 47—Mode X: 256-Color VGA Magic -
    -
    Introducing the VGA’s Undocumented “Animation-Optimal” Mode
    +
    -
  • +
  • Hardware Assist from an Unexpected Quarter
  • + + -
    - Chapter 48—Mode X Marks the Latch +
  • + Chapter 48—Mode X Marks the Latch -
    -
    The Internals of Animation’s Best Video Display Mode
    +
    -
  • +
  • Who Was that Masked Image Copier?
  • + + -
    - Chapter 49—Mode X 256-Color Animation +
  • + Chapter 49—Mode X 256-Color Animation -
    -
    How to Make the VGA Really Get up and Dance
    + +
  • -
    Animation
    +
  • Animation
  • -
    Mode X Animation in Action
    +
  • Mode X Animation in Action
  • -
    Works Fast, Looks Great
    - - +
  • Works Fast, Looks Great
  • + + -
    - Chapter 50—Adding a Dimension +
  • + Chapter 50—Adding a Dimension -
    -
    3-D Animation Using Mode X
    + +
  • -
    - A Simple 3-D Example +
  • + A Simple 3-D Example -
    -
    Notes on the 3-D Animation Example
    -
    -
  • + + -
    An Ongoing Journey
    - - +
  • An Ongoing Journey
  • + + -
    - Chapter 51—Sneakers in Space +
  • + Chapter 51—Sneakers in Space -
    -
    Using Backface Removal to Eliminate Hidden Surfaces
    +
    -
  • +
  • Object Representation
  • + + -
    - Chapter 52—Fast 3-D Animation: Meet X-Sharp +
  • + Chapter 52—Fast 3-D Animation: Meet X-Sharp -
    -
    The First Iteration of a Generalized 3-D Animation Package
    +
    -
  • +
  • Where the Time Goes
  • + + + + -
    - Chapter 53—Raw Speed and More +
  • + Chapter 53—Raw Speed and More -
    -
    The Naked Truth About Speed in 3-D Animation
    +
    -
  • +
  • Rounding
  • + + + + -
    - Chapter 54—3-D Shading +
  • + Chapter 54—3-D Shading -
    -
    Putting Realistic Surfaces on Animated 3-D Objects
    + +
  • -
    Shading: Implementation Details
    - - - - +
  • Shading: Implementation Details
  • + + + + -
    - Chapter 55—Color Modeling in 256-Color Mode +
  • + Chapter 55—Color Modeling in 256-Color Mode -
    -
    - Pondering X-Sharp’s Color Model in an RGB State of Mind +
    -
    -
  • +
  • A Bonus from the BitMan
  • + + + + -
    - Chapter 56—Pooh and the Space Station +
  • + Chapter 56—Pooh and the Space Station -
    -
    Using Fast Texture Mapping to Place Pooh on a Polygon
    +
    -
  • +
  • Fast Texture Mapping: An Implementation
  • + + -
    - Chapter 57—10,000 Freshly Sheared Sheep on the Screen +
  • + Chapter 57—10,000 Freshly Sheared Sheep on the Screen -
    -
    - The Critical Role of Experience in Implementing Fast, Smooth Texture Mapping +
    -
    -
  • + + + + + + -
    - Chapter 58—Heinlein’s Crystal Ball, Spock’s Brain, and the 9-Cycle Dare +
  • + Chapter 58—Heinlein’s Crystal Ball, Spock’s Brain, and the 9-Cycle Dare -
    -
    Using the Whole-Brain Approach to Accelerate Texture Mapping
    + +
  • -
    - That’s Nice—But it Sure as Heck Ain’t 9 Cycles +
  • + That’s Nice—But it Sure as Heck Ain’t 9 Cycles -
    -
    Don’t Stop Thinking about Those Cycles
    -
    -
  • + + -
    Texture Mapping Notes
    - - +
  • Texture Mapping Notes
  • + + -
    - Chapter 59—The Idea of BSP Trees +
  • + Chapter 59—The Idea of BSP Trees -
    -
    What BSP Trees Are and How to Walk Them
    + +
  • -
    - Building a BSP Tree +
  • + Building a BSP Tree -
    -
    Visibility Ordering
    -
    -
  • + + -
    - Inorder Walks of BSP Trees +
  • + Inorder Walks of BSP Trees -
    -
    Know It Cold
    +
    -
  • +
  • Measure and Learn
  • + + -
    - Surfing Amidst the Trees +
  • + Surfing Amidst the Trees -
    -
    Related Reading
    -
    -
  • - - + + + + -
    - Chapter 60—Compiling BSP Trees +
  • + Chapter 60—Compiling BSP Trees -
    -
    Taking BSP Trees from Concept to Reality
    + +
  • -
    Optimizing the BSP Tree
    +
  • Optimizing the BSP Tree
  • -
    BSP Optimization: an Undiscovered Country
    - - +
  • BSP Optimization: an Undiscovered Country
  • + + -
    - Chapter 61—Frames of Reference +
  • + Chapter 61—Frames of Reference -
    -
    - The Fundamentals of the Math behind 3-D Graphics +
    +
  • Foundation Definitions
  • + +
  • -
    - The Dot Product +
  • + The Dot Product -
    -
    Dot Products of Unit Vectors
    -
    -
  • + + -
    Cross Products and the Generation of Polygon Normals
    +
  • Cross Products and the Generation of Polygon Normals
  • -
    Using the Sign of the Dot Product
    +
  • Using the Sign of the Dot Product
  • -
    Using the Dot Product for Projection
    +
  • Using the Dot Product for Projection
  • -
    Rotation by Projection
    - - +
  • Rotation by Projection
  • + + -
    - Chapter 62—One Story, Two Rules, and a BSP Renderer +
  • + Chapter 62—One Story, Two Rules, and a BSP Renderer -
    -
    - Taking a Compiled BSP Tree from Logical to Visual Reality +
    +
  • The Rendering Pipeline
  • + +
  • -
    Moving the Viewer
    +
  • Moving the Viewer
  • -
    Transformation into Viewspace
    +
  • Transformation into Viewspace
  • -
    Clipping
    +
  • Clipping
  • -
    Projection to Screenspace
    +
  • Projection to Screenspace
  • -
    - Walking the Tree, Backface Culling and Drawing +
  • + Walking the Tree, Backface Culling and Drawing -
    -
    Notes on the BSP Renderer
    -
    -
  • - - + + + + -
    - Chapter 63—Floating-Point for Real-Time 3-D +
  • + Chapter 63—Floating-Point for Real-Time 3-D -
    -
    Knowing When to Hurl Conventional Math Wisdom Out the Window
    + +
  • -
    The Dot Product
    +
  • The Dot Product
  • -
    The Cross Product
    +
  • The Cross Product
  • -
    Transformation
    +
  • Transformation
  • -
    Projection
    +
  • Projection
  • -
    Rounding Control
    +
  • Rounding Control
  • -
    A Farewell to 3-D Fixed-Point
    - - +
  • A Farewell to 3-D Fixed-Point
  • + + -
    - Chapter 64—Quake’s Visible-Surface Determination +
  • + Chapter 64—Quake’s Visible-Surface Determination -
    -
    The Challenge of Separating All Things Seen from All Things Unseen
    + +
  • -
    Breakthrough!
    +
  • Breakthrough!
  • -
    Simplify, and Keep on Trying New Things
    +
  • Simplify, and Keep on Trying New Things
  • -
    Learn Now, Pay Forward
    +
  • Learn Now, Pay Forward
  • -
    References
    - - +
  • References
  • + + -
    - Chapter 65—3-D Clipping and Other Thoughts +
  • + Chapter 65—3-D Clipping and Other Thoughts -
    -
    Determining What’s Inside Your Field of View
    + +
  • -
    Advantages of Viewspace Clipping
    +
  • Advantages of Viewspace Clipping
  • -
    Further Reading
    - - +
  • Further Reading
  • + + -
    - Chapter 66—Quake’s Hidden-Surface Removal +
  • + Chapter 66—Quake’s Hidden-Surface Removal -
    -
    Struggling with Z-Order Solutions to the Hidden Surface Problem
    + +
  • -
    Sorted Spans
    +
  • Sorted Spans
  • -
    Edges versus Spans
    +
  • Edges versus Spans
  • -
    - Edge-Sorting Keys +
  • + Edge-Sorting Keys -
    -
    Where That 1/Z Equation Comes From
    +
    -
  • +
  • Quake and Z-Sorting
  • + + -
    Decisions Deferred
    - - +
  • Decisions Deferred
  • + + -
    - Chapter 67—Sorted Spans in Action +
  • + Chapter 67—Sorted Spans in Action -
    -
    Implementing Independent Span Sorting for Rendering without Overdraw
    + +
  • -
    - 1/z Span Sorting in Action +
  • + 1/z Span Sorting in Action -
    -
    Implementation Notes
    -
    -
  • - - + + + + -
    - Chapter 68—Quake’s Lighting Model +
  • + Chapter 68—Quake’s Lighting Model -
    -
    A Radically Different Approach to Lighting Polygons
    + +
  • -
    - The Quest for Alternative Lighting +
  • + The Quest for Alternative Lighting -
    -
    Decoupling Lighting from Rasterization
    +
    -
  • +
  • Size and Speed
  • + + -
    - Surface Caching +
  • + Surface Caching -
    -
    Mipmapping To The Rescue
    +
    -
  • - - +
  • Two Final Notes on Surface Caching
  • + + + + -
    - Chapter 69—Surface Caching and Quake’s Triangle Models +
  • + Chapter 69—Surface Caching and Quake’s Triangle Models -
    -
    Probing Hardware-Assisted Surfaces and Fast Model Animation Without Sprites
    + +
  • -
    - Drawing Triangle Models +
  • + Drawing Triangle Models -
    -
    Drawing Triangle Models Fast
    +
    -
  • - - +
  • More Ideas that Might Work
  • + + + + -
    - Chapter 70—Quake: A Post-Mortem and a Glimpse into the Future +
  • + Chapter 70—Quake: A Post-Mortem and a Glimpse into the Future -
    -
    Preprocessing the World
    + +
  • -
    - Entities +
  • + Entities -
    -
    BSP Models
    +
    -
  • +
  • Particles
  • + + -
    - How We Spent Our Summer Vacation: After Shipping Quake +
  • + How We Spent Our Summer Vacation: After Shipping Quake -
    -
    Verite Quake
    +
    -
  • +
  • Quake 2
  • + + -
    Looking Forward
    - - - - - +
  • Looking Forward
  • + + + + -
    -
    Appendix A
    +
  • Appendix A
  • -
    Index
    -
    +
  • Index
  • +