2017-01-10 30 views
1

我想了解如何使用OpenTK在2D應用程序中使用OpenGL,並且已經閱讀使用內置調用glMatrixMode並不現代。我想在我的着色器輸入中使用左上角的原點和像素座標,並假定我可以定義一個矩陣來做這些翻譯。OpenTK - 左上角原點和像素座標

我正在嘗試使用我自己的矩陣使用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

w組件有哪些值?在均勻化(除以w)之後,每個軸上[-1,1]的假設是唯一的。 – BDL

+0

乘以w後是-1791。在乘法之前,位置矢量用w初始化爲1。 – chris

回答

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]

+1

謝謝你這麼多 - 我的紫色廣場頂部的白色方形繪製得很漂亮。 – chris

相關問題