我正在尝试使用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.
我想我在某个地方遇到了一个重大的误解,我该怎么看?
答案 0 :(得分: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]
。