OpenTK - 左上角原点和像素坐标



我正在尝试学习如何通过使用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]

最新更新