Finally got it! It was a combination of OpenGL row-major vs. column-major and a lesser known difference between projection matrices (DirectX screen-space origin is top-left, OpenGL is bottom-left).
Such a relief for me – I have literally not been sleeping well … my dreams incorporate concatenations, negative signs, etc. I actually read this lecture a while back but I didn’t focus on the differences between OpenGL and DirectX because I didn’t actually have a solution for either platform until very recently.



Leave a Reply