2014-09-21 102 views
0

假设我有一个用于转换的OpenGL 4x4矩阵,在我的调用中,我多次使用“翻译”,但最后我想“围绕”特定大小的翻译,所以,用二维术语来说,假设我将X翻译为210,那么我想将该翻译包装到“50宽度”框中,导致翻译10(210%50)。包装OpenGL矩阵翻译

因为我需要的坐标转换成屏幕像素i转换初始化我Matrix在这样:

private float[] mScreenMatrix = { 
     2f/width, 0f, 0f, 0f, 
     0f, -2f/height, 0f, 0f, 
     0f, 0f, 0f, 0f, 
     -1f, 1f, 0f, 1f 
}; 

所以,如果宽度是 “50”,我叫Matrix.translateM(210,0,0)我怎么才能“包装”这个矩阵,所以x上的最终译文只有10?

回答

1

你不能(没有做额外的工作),因为那套引入模运算(或环形拓扑结构)不顺便OpenGL的NDC空间(大致翻译成你可以在窗口中看到的体积比)匹配布局。当一个图元到达NDC空间时,它将得到剪辑,以便剩下的是在NDC空间内。

因此,为了获得环形拓扑,您必须复制由NDC剪切的原始图元,并将其重新引入以显示NDC的另一端。唯一的方法是通过显式提交额外的几何图形或使用几何着色器原位创建这种几何图形。

+0

感谢您的详细答案,我怀疑它不会很容易,我会尝试看看我能否以某种方式解决此问题,谢谢 – FrankMonza 2014-09-21 19:32:10

0

如果您使用的是正交投影,那么您可以渲染到纹理,然后在第二次渲染过程中将其包裹。如果您使用透视投影,仍然可以使用相同的方法,但结果不切实际。