Reddit Reddit reviews Michael Abrash's Graphics Programming Black Book (Special Edition)

We found 10 Reddit comments about Michael Abrash's Graphics Programming Black Book (Special Edition). Here are the top ones, ranked by their Reddit score.

Computers & Technology
Books
Desktop Publishing
Computer Graphics & Design
Michael Abrash's Graphics Programming Black Book (Special Edition)
Used Book in Good Condition
Check price on Amazon

10 Reddit comments about Michael Abrash's Graphics Programming Black Book (Special Edition):

u/mrkite77 · 4 pointsr/programming

It's hit and miss. A lot of it deals with outdated assembly language minutia, to the point where he actually reorders assembly by hand to handle pipeline stalls on the pentium. But there's a lot of good left in it.

Take the chapter on string searching, for example. He'll start out with the simplest string searching, and then introduce concepts like searching for less common characters first, and eventually lands on the boyer-moore algorithm. Even though the book is 90% assembly, he repeatedly makes the point that algorithmic changes gives you 100x speedups, while assembly rewrites only give you modest speedups.

However, if you're into game and graphics programming, I recommend going straight for Abrash's compilation book:

https://www.amazon.com/Michael-Abrashs-Graphics-Programming-Special/dp/1576101746

It contains pretty much everything he's ever written. The entirety of the Zen of Code Optimization, the Zen of Graphics Programming, and a whole bunch of stuff from when Abrash was developing Quake with John Carmack.

u/TheStudyOf_Wumbo · 4 pointsr/UofT

Most important thing IMO is /u/MysteryMo 's response cause if you don't like it, then you probably won't finish it.

Projects that got me into what appears to be high places in this field were things that are very painful to do due to the amount of things you need to know. For example, making your own game engine with a renderer is a very obnoxious task and you have to not only be good at linear algebra/math/physics/networks/etc, but your programming skills and debugging strategies cannot suck. Even then when you're passing stuff off to the GPU with OpenGL (or w/e library here), sometimes even then you have no idea why suddenly all your polygons aren't rendering and no output message as to why. There probably are tools to help with this but I could only find one and it was outdated. You will be probably reading a literal fuckton of articles, considering learning assembly to use SSE if you're not using a GPU to do all the good stuff for you, and also dealing with the aspies of the internet when you try to get help on some problem you run into. For example, to get a software renderer running, I had to read tons of textbooks in my free time and spent countless hours absorbing tomes like this just to understand the higher level concepts and play around with optimized implementations.

Maybe a combination of all the above is why some of these projects look really good, since they're generally a pain in the ass to do right even if you know what you're doing.

If the project does something epic like has distributed system components that serves people stuff, this will look a lot better than the next run-of-the-mill-CRUD-app.

I sometimes wonder if maybe taking some cutting edge algorithm and coding it or implementing some advancements with it would be less painful than the journey I took, and also look better.

u/mysticreddit · 2 pointsr/gamedev

I still have my Black Art of 3D Game Programming around here someplace ...

I always thought he was over rated compared to Michael Abrash's Michael Abrash's Graphics Programming Black Book

u/CSMastermind · 2 pointsr/AskComputerScience

Senior Level Software Engineer Reading List


Read This First


  1. Mastery: The Keys to Success and Long-Term Fulfillment

    Fundamentals


  2. Patterns of Enterprise Application Architecture
  3. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
  4. Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML
  5. Systemantics: How Systems Work and Especially How They Fail
  6. Rework
  7. Writing Secure Code
  8. Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

    Development Theory


  9. Growing Object-Oriented Software, Guided by Tests
  10. Object-Oriented Analysis and Design with Applications
  11. Introduction to Functional Programming
  12. Design Concepts in Programming Languages
  13. Code Reading: The Open Source Perspective
  14. Modern Operating Systems
  15. Extreme Programming Explained: Embrace Change
  16. The Elements of Computing Systems: Building a Modern Computer from First Principles
  17. Code: The Hidden Language of Computer Hardware and Software

    Philosophy of Programming


  18. Making Software: What Really Works, and Why We Believe It
  19. Beautiful Code: Leading Programmers Explain How They Think
  20. The Elements of Programming Style
  21. A Discipline of Programming
  22. The Practice of Programming
  23. Computer Systems: A Programmer's Perspective
  24. Object Thinking
  25. How to Solve It by Computer
  26. 97 Things Every Programmer Should Know: Collective Wisdom from the Experts

    Mentality


  27. Hackers and Painters: Big Ideas from the Computer Age
  28. The Intentional Stance
  29. Things That Make Us Smart: Defending Human Attributes In The Age Of The Machine
  30. The Back of the Napkin: Solving Problems and Selling Ideas with Pictures
  31. The Timeless Way of Building
  32. The Soul Of A New Machine
  33. WIZARDRY COMPILED
  34. YOUTH
  35. Understanding Comics: The Invisible Art

    Software Engineering Skill Sets


  36. Software Tools
  37. UML Distilled: A Brief Guide to the Standard Object Modeling Language
  38. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development
  39. Practical Parallel Programming
  40. Past, Present, Parallel: A Survey of Available Parallel Computer Systems
  41. Mastering Regular Expressions
  42. Compilers: Principles, Techniques, and Tools
  43. Computer Graphics: Principles and Practice in C
  44. Michael Abrash's Graphics Programming Black Book
  45. The Art of Deception: Controlling the Human Element of Security
  46. SOA in Practice: The Art of Distributed System Design
  47. Data Mining: Practical Machine Learning Tools and Techniques
  48. Data Crunching: Solve Everyday Problems Using Java, Python, and more.

    Design


  49. The Psychology Of Everyday Things
  50. About Face 3: The Essentials of Interaction Design
  51. Design for Hackers: Reverse Engineering Beauty
  52. The Non-Designer's Design Book

    History


  53. Micro-ISV: From Vision to Reality
  54. Death March
  55. Showstopper! the Breakneck Race to Create Windows NT and the Next Generation at Microsoft
  56. The PayPal Wars: Battles with eBay, the Media, the Mafia, and the Rest of Planet Earth
  57. The Business of Software: What Every Manager, Programmer, and Entrepreneur Must Know to Thrive and Survive in Good Times and Bad
  58. In the Beginning...was the Command Line

    Specialist Skills


  59. The Art of UNIX Programming
  60. Advanced Programming in the UNIX Environment
  61. Programming Windows
  62. Cocoa Programming for Mac OS X
  63. Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals
  64. lex & yacc
  65. The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
  66. C Programming Language
  67. No Bugs!: Delivering Error Free Code in C and C++
  68. Modern C++ Design: Generic Programming and Design Patterns Applied
  69. Agile Principles, Patterns, and Practices in C#
  70. Pragmatic Unit Testing in C# with NUnit

    DevOps Reading List


  71. Time Management for System Administrators: Stop Working Late and Start Working Smart
  72. The Practice of Cloud System Administration: DevOps and SRE Practices for Web Services
  73. The Practice of System and Network Administration: DevOps and other Best Practices for Enterprise IT
  74. Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale
  75. DevOps: A Software Architect's Perspective
  76. The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
  77. Site Reliability Engineering: How Google Runs Production Systems
  78. Cloud Native Java: Designing Resilient Systems with Spring Boot, Spring Cloud, and Cloud Foundry
  79. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
  80. Migrating Large-Scale Services to the Cloud
u/Madsy9 · 1 pointr/opengl

You didn't post a question, so it's difficult to know what exactly you want. If you just need to implement space partitioning with a BSP tree, read the good old BSP FAQ

If you need more general graphics background, check out:

  • Websites like Flipcode and GameDev.net

  • Buy some books. GraphicsGems and Michael Abrash's Graphics Programming Black Book are maybe old, and the code examples are certainly outdated (They are from the old MS-DOS mode 13h VGA days), but they are excellent in teaching you the fundamentals of computer graphics theory that never gets old. Like how polygon rasterizers work, space partitioning, polygon clipping, etc. When you want to learn more about more advanced effects, look into the Real-Time Rendering series. For a slightly more updated book on the same topic, check out 3D Math Primer for Graphics and Game Development, but I think it's a bit thin for the price (I have the 1st edition myself).

  • Forums with people who actually specializes in computer graphics, like Ompf2 and DevMaster

    If you have more questions, please be more specific. I might help you with more resources.
u/an_ancient_cyclops00 · 1 pointr/truegaming

Also read up on Abrash's book.

http://www.amazon.com/books/dp/1576101746

The last couple chapters goes into when Abrash was with iD and was there with Carmack when he was coming up with the following: " Optimized solutions to 3-D graphics problems from texture mapping, hidden surface removal, and Binary Space Partitioning (BSP) trees are explained."

u/PriscaDoulos · 1 pointr/gaming

I was more surprised by Michael Abrash, the guy is a genius when it comes to assembly and was essential to the development of Quake, even AutoCAD's line drawing algorithm from when there was no hardware acceleration is his creation. That book is worth reading even with the assembly part being outdated, merely because of the historical side and the creativity he shows to optimize solving problems.

u/theunfilteredtruth · 1 pointr/truegaming

You are correct that it isn't really 3d, it is lots of 2d shapes rendered to look like 3d.

The DOOM Engine did something unique though which made it so much faster than the other games. In other games, the rendering process would be like you said; start from things farthest away and rendering until you get close to the player. Abrash and Caramack implemented Binary Space Partition (BSP) tree creation that was used to quickly figure out which part of the maps did not even have to be considered to render.

This is a great link showing how the BSP was referenced all the time during gameplay and how the calculations worked.

http://fabiensanglard.net/doomIphone/doomClassicRenderer.php

I think you also might be interested in buying my fav book, Michael Abrash's Graphics Programming Black Book. It has a lot of discussion on 3d engines including how the DOOM/QUAKE engines were built and their weaknesses but also includes anecdotes during their development. Quake still used BSPs, but built a whole new process (QVIS) where the compiling calculated exactly what surfaces a player could see from any position in the map and know which surfaces to load because they might see it soon (like rounding a corner).

https://www.amazon.com/Michael-Abrashs-Graphics-Programming-Special/dp/1576101746