放大GLPaint示例代码

时间:2013-05-23 16:07:44

标签: iphone opengl-es

我想创建一个应用程序,您可以在GLPaint示例代码中绘制,但也可以放大以在绘画中绘制更多细节。 但是我觉得使用在GLPaint应用程序中使用的OpenGL ES 1.0非常难以学习,并且可能对我的需求有点过分。 如果我使用setFrame方法对主视图框进行切换以使用手势识别器进行缩放,则每次更改帧大小时都会删除已绘制的线条。

所以我试图用另一个想法来实现它:在touchmoves方法中,我添加了“很多”位置uiimageviews与画笔的图像,它比glpaint应用程序和一点点的memomy管理混乱慢,但我没有看到去那里的另一种方式。

任何建议,学习openGL ES 1.0或2.0或尝试实现最后的想法

2 个答案:

答案 0 :(得分:0)

你当然可以实现自己的目标,但需要付出一些努力。

通常缩放很简单,因为大多数OpenGL场景通常不像GLPaint示例代码那样依赖于累积缓冲区。

如果您尝试在GLPaint中缩放视图,您的新绘画将以原始绘图的某个调整比例绘制 - 这几乎肯定不是您想要的。

解决方法不是直接绘制到呈现屏幕缓冲区,而是先渲染到纹理缓冲区,然后在四边形(或等效物)上渲染所述纹理缓冲区。这样,当您的绘制缓冲区保留其累积缓冲区时,可以清除每个帧刷新(以您选择的任何比例)重新渲染四边形场景。

这已经过测试并且有效。

答案 1 :(得分:-1)

我很确定图像视图方法在绘制几分钟后会出现过度杀伤...你可以用openGL很好地进行缩放,我建议你这样做。麻烦的做法是创建一个尽可能大的画布,这样当你放大时你不会失去任何分辨率。

关于缩放:请勿尝试调整GL框架或任何框架的大小,因为即使您设法成功完成此操作也会失去分辨率。您应该使用标准矩阵来翻译和缩放场景,或者只使用glOrtho(将其值设置为您当前看到的矩形)。一旦你得到那个部分,遗憾的是还有两件事需要做一些数学运算,首先你需要在openGL场景中计算新的触摸位置,因为视图中的位置不会知道你的缩放和翻译,第二是您可能还需要缩放画笔(当场景较大时缩小以便绘制细节)。

关于画布:我建议您绘制到FBO而不是主渲染缓冲区,并将纹理呈现给主渲染场景。请注意,FBO将附加纹理,并且功率大小为2(对于较新的设备创建2048x2048或4096x4096),但您可能只是使用它的某些部分来保持与屏幕相同的比例({{1}应该做的工作)所以你必须计算纹理坐标。总的来说,绘图机制没有太大变化。

总而言之,假设您有一个画布(FBO),您可以在触摸事件上应用特定大小和位置的画笔,然后将该画布用作纹理并将其绘制在主GL视图上。 / p>