包装OpenGL矩阵翻译

时间:2014-09-21 09:20:22

标签: android matrix opengl-es opengl-es-2.0

让我们说我有一个OpenGL 4x4矩阵,我用它进行一些转换,在我的通话中使用"翻译"很多次,但最后,我想"包装"这个翻译围绕一个特定的大小,所以,在二维方面,让我们说我将X翻译210,然后我想把这个翻译包装成一个" 50宽度"框,导致翻译10(210%50)。

由于我需要将坐标转换为屏幕像素,因此我以这种方式初始化我的矩阵:

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?

2 个答案:

答案 0 :(得分:1)

你不能(不做额外的工作),因为那个包裹引入了模运算(或环形拓扑),它与OpenGL的NDC空间(大致转换为音量)的方式不匹配你可以在窗口看到)布局。当一个图元到达NDC空间时,它会被剪切,这样剩下的就在NDC空间内。

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

答案 1 :(得分:0)

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