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
+
+ - Introduction
- - Foreword
+ - Foreword
- - About the Author
-
+ - About the Author
- -
- Part I
+
-
+ Part I
-
- -
- Chapter 1—The Best Optimizer Is between Your Ears
+
+ -
+ Chapter 1—The Best Optimizer Is between Your Ears
-
- - The Human Element of Code Optimization
+
- -
- Rules for Building High-Performance Code
+
-
+ Rules for Building High-Performance Code
-
- - Know Where You’re Going
+
-
+ - Know How to Turn On the Juice
+
+
- -
- Where We’ve Been, What We’ve Seen
+
-
+ Where We’ve Been, What We’ve Seen
-
- - Where We’re Going
-
-
-
-
+
+
+
+
-
- Chapter 2—A World Apart
+
+ Chapter 2—A World Apart
-
- - The Unique Nature of Assembly Language Optimization
+
+
-
- The Flexible Mind
+
+ The Flexible Mind
-
- - Where to Begin?
-
-
-
-
+
+
+
+
-
- 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 8-Bit Bus Cycle-Eater
+
+ The 8-Bit Bus Cycle-Eater
-
- - The Impact of the 8-Bit Bus Cycle-Eater
+
-
+ What to Do about the 8-Bit Bus Cycle-Eater?
+
+
-
- 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
+
-
- Challenges and Hazards
+
+ Challenges and Hazards
-
- - Blinding Yourself to a Better Approach
+
-
+ Watch Out for Luggable Assumptions!
+
+
- 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
+
- Where Does the Time Go?
+ Where Does the Time Go?
- The Hazards and Advantages of Abstraction
+ The Hazards and Advantages of Abstraction
- Heavy-Duty C++ Optimization
+ Heavy-Duty C++ Optimization
-
- Bringing In the Right Brain
+
+ Bringing In the Right Brain
-
- - Re-Examining the Task
+
-
-
-
+ 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
+
- Who’s in First?
+ Who’s in First?
-
- Pentium Optimization in Action
+
+ Pentium Optimization in Action
-
- - A Quick Note on the 386 and 486
-
-
-
-
+
+
+
+
-
- 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
+
+ -
+ Chapter 23—Bones and Sinew
-
- - At the Very Heart of Standard PC Graphics
+
+
- - The Hazards of VGA Clones
+ - The Hazards of VGA Clones
- - Just the Beginning
+ - Just the Beginning
- - 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
+
-
- An Implementation in C
+
+ An Implementation in C
-
- - Looking at EVGALine
+
-
+ Drawing Each Pixel
+
+
- 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
+
-
- Complex Polygon Filling: An Implementation
+
+ Complex Polygon Filling: An Implementation
-
- - More on Active Edges
+
-
+ Performance Considerations
+
+
-
- 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
+
- Bit-Plane Animation in Action
+ Bit-Plane Animation in Action
- Limitations of Bit-Plane Animation
+ Limitations of Bit-Plane Animation
- Shearing and Page Flipping
+ Shearing and Page Flipping
- Beating the Odds in the Jaw-Dropping Contest
-
-
+ 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
+
- Dirty Rectangles in Action
+ Dirty Rectangles in Action
- Hi-Res VGA Page Flipping
+ Hi-Res VGA Page Flipping
- Another Interesting Twist on Page Flipping
-
-
+ 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?
-
-
+ 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
+
- Incremental Transformation
+ Incremental Transformation
- A Note on Rounding Negative Numbers
+ A Note on Rounding Negative Numbers
- Object Representation
-
-
+ 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
-
-
+ 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
+
- Overdraw
+ Overdraw
- The Beam Tree
+ The Beam Tree
-
- 3-D Engine du Jour
+
+ 3-D Engine du Jour
-
- - Subdividing Raycast
+
-
+ Portals
+
+
- 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
+
-
- Polygon Clipping
+
+ Polygon Clipping
-
- - Clipping to the Frustum
+
-
+ The Lessons of Listing 65.3
+
+
- 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
+