Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CaeAglayer(iOS)子集上使用仿射变换?_Ios_Objective C_Opengl Es_Core Graphics_Core Animation - Fatal编程技术网

如何在CaeAglayer(iOS)子集上使用仿射变换?

如何在CaeAglayer(iOS)子集上使用仿射变换?,ios,objective-c,opengl-es,core-graphics,core-animation,Ios,Objective C,Opengl Es,Core Graphics,Core Animation,我正在玩OpenGL和core动画,能够在OpenGL层上进行仿射变换,一切都很好。正在寻找有关如何变换层的子集(即上半部分或下四分之一)的帮助,并仅旋转这些像素,同时保持层的其余部分不变 或者,如果我有一个openGL层,是否可以将其拆分为2个(顶部和底部部分)。然后我可以根据需要执行转换。我无法访问层中的子视图,只能访问整个层 如果您有任何建议,我们将不胜感激。要在视图管道中执行此操作,您需要多个视图。一般来说,这并没有什么错,但您需要做一些工作来绘制每个视图,使其看起来像一个整体。如果使用

我正在玩OpenGL和core动画,能够在OpenGL层上进行仿射变换,一切都很好。正在寻找有关如何变换层的子集(即上半部分或下四分之一)的帮助,并仅旋转这些像素,同时保持层的其余部分不变

或者,如果我有一个openGL层,是否可以将其拆分为2个(顶部和底部部分)。然后我可以根据需要执行转换。我无法访问层中的子视图,只能访问整个层


如果您有任何建议,我们将不胜感激。

要在视图管道中执行此操作,您需要多个视图。一般来说,这并没有什么错,但您需要做一些工作来绘制每个视图,使其看起来像一个整体。如果使用标准投影矩阵,例如
glOrtho
,则只需根据视图分割相应地分割边界参数(顶部、底部、左侧和右侧)

直接使用openGL有多种方法。选择哪一个取决于你的需要

一种方法是使用视口。这描述了要绘制缓冲区的哪一部分,以便可以将其拆分为多个绘制调用,并绘制到不同的位置。这通常对于视图环境中的视图更有用

最好的方法可能是将整个场景绘制到带有附加纹理的FBO(帧缓冲区对象)。然后创建要设置动画的精灵(矩形),然后将部分纹理绘制到这些矩形

然而,您仍然需要一个能够在openGL中制作动画的系统。要实现这一点,需要进行矩阵插值。这可能需要一点时间,但通常是值得的,因为您可以完全控制动画以及动画的制作方式。请注意,由于旋转,您需要在极坐标系中进行插值,这意味着将3个基本向量(矩阵左上角3x3部分)转换为角度+半径,并对其进行插值