OpenTK - 左上原点和像素坐标

OpenTK - Top Left Origin and pixel co-ordinates

我正在尝试通过使用 OpenTK 来学习如何在 2D 应用程序中使用 OpenGL,并且已经读到使用内置调用 glMatrixMode 并不现代。我想在我的着色器输入中使用左上原点和像素坐标,并假设我可以定义一个矩阵来进行这些转换。

我正在尝试使用我自己的矩阵和 OpenTK 矩阵类来执行此操作。但是我认为我在设置投影矩阵时犯了一个错误,想验证我应该做什么:-

TranslationMatrix = Matrix4.Identity * Matrix4.CreateScale(1, -1, 1);
TranslationMatrix = TranslationMatrix * Matrix4.CreateOrthographicOffCenter(0, bounds.Width, 0, bounds.Height, -1, 1);
var TranslatedPoint = TranslationMatrix * new Vector4(new Vector3(1024, 768, 0), 1); // bounds = {0, 0, 1024, 768 }

这导致 x.Xyz == { 2, -2, 0 }。我认为顶点着色器中 gl_position 中使用的 x 和 y 坐标的范围应为 -1 到 1。

我想我在某处产生了重大误解,我应该看什么?

OpenTK 以转置形式存储矩阵。这意味着您必须以相反的顺序编写所有内容。

var TranslationMatrix = Matrix4.CreateOrthographicOffCenter(0, bounds.Width, 0, bounds.Height, -1, 1);
TranslationMatrix = TranslationMatrix * Matrix4.CreateScale(1, -1, 1);
var TranslatedPoint = new Vector4(1024, 768, 0, 1) * TranslationMatrix;

结果现在应该是 [1, -1, 0, 1]