Tag: opengl es

纹理采样坐标渲染雪碧

假设我们有一个纹理(在这种情况下是8×8像素)我们想用作精灵表。 其中一个子图像(sprite)是纹理内的4×3的子区域,就像在这个图像中一样: (显示四angular的标准化纹理坐标) 现在,基本上有两种方法将纹理坐标分配给4像素x 3像素大小的四边形,以便它有效地成为我们正在寻找的精灵; 首先也是最直接的是在分区域的angular落采样纹理: // Texture coordinates GLfloat sMin = (xIndex0 ) / imageWidth; GLfloat sMax = (xIndex0 + subregionWidth ) / imageWidth; GLfloat tMin = (yIndex0 ) / imageHeight; GLfloat tMax = (yIndex0 + subregionHeight) / imageHeight; 虽然当第一次实施这种方法,约。 2010年,我意识到这些精灵看起来有点“扭曲”了。 经过一番search之后,我在cocos2d论坛上发现了一篇文章,解释渲染精灵时用于采样纹理的“正确方法”是: // Texture coordinates GLfloat sMin = (xIndex0 + 0.5) / imageWidth; GLfloat […]

如何在iPhone OpenGL ES粒子系统中绘制1000多个粒子(具有独特的旋转,缩放和alpha)而不会减慢游戏速度?

我正在开发一个使用OpenGL ES 1.1的iPhone游戏。 在这个游戏中,我会有一些血液粒子在被射击时从angular色中散发出来,所以在任何时候屏幕上都会有1000多个血液粒子。 问题是,当我有超过500个粒子渲染,游戏的帧速率下降非常大。 目前,每个粒子使用glDrawArrays(..)渲染自己,我知道这是造成速度减慢的原因。 所有的粒子共享相同的纹理地图集。 那么减less绘制多个粒子的速度最好的select是什么? 以下是我find的选项: 将所有的血液粒子组合在一起,并使用一个单一的glDrawArrays(..)调用渲染 – 如果我使用这种方法,有没有办法让每个粒子有自己的旋转和alpha? 或者当这个方法被使用时,他们都必须有相同的旋转? 如果我无法渲染具有独特旋转的粒子,那么我不能使用这个选项。 在OpenGL ES 2.0中使用点精灵。 我没有使用OpenGL ES 2.0,但我需要满足一个截止date,我已经在App Store上发布了我的游戏。 要使用OpenGL ES需要进行初步的研究,不幸的是我没有时间去执行。 在稍后的版本中,我将升级到OpenGL ES 2.0,但首先我只想使用1.1。 这里是每个粒子渲染本身。 这是我最初的粒子渲染方法,它使得游戏在渲染了500多个粒子之后经历了帧速率的显着下降。 // original method: each particle renders itself. // slow when many particles must be rendered [[AtlasLibrary sharedAtlasLibrary] ensureContainingTextureAtlasIsBoundInOpenGLES:self.containingAtlasKey]; glPushMatrix(); // translate glTranslatef(translation.x, translation.y, translation.z); // rotate glRotatef(rotation.x, […]

显示地图时,iOS 6应用程序在EAGLContext中崩溃

我们有一个使用OpenGL和MKMapView的应用程序。 当我们切换到iOS 6时,无论何时我们试图在设置自己的EAGLContext后显示地图,它都会在[EAGLContext setCurrentContext:]处崩溃。

在iPhone GPU上解码video帧

我正在寻找最快的方式来解码iPhone上的本地mpeg-4video帧。 我只是感兴趣的像素在每10帧的亮度值。 我不需要在任何地方渲染video。 我试过ffmpeg,AVAssetReader,ImageAssetGenerator,OpenCV和MPMoviePlayer,但它们都太慢了。 我能得到的最快速度是2倍(一分钟内扫描2分钟的video)。 我想要更接近10倍的东西。 假设我上面的尝试没有使用GPU,是否有任何方法来完成我的目标与GPU上运行的东西? OpenGL似乎主要是为渲染输出,但我已经看到它用作传入video的filter。 也许这是一个select? 提前致谢!

从iOS上的图像的脸部2D畸变? (类似于Fat Booth等)

我只是想知道,如果有人知道一些好的图书馆或教程如何实现从用户采取的图像拍摄的脸部2D畸变。 我希望能和Fatify,Oldify,Fat Booths等类似的效果达到类似的效果,因为我正在创build一个应用程序,在这个应用程序中我们可以在脸上扔东西,当脸上的东西击中它。 我应该怎么做?

在iOS OpenGL ES 2.0中将纹理的一部分(精灵表/纹理贴图)应用于点精灵

看起来这应该很容易,但是使用点精灵的纹理的一部分有很多困难。 我广泛search了各种答案,但没有一个处理我遇到的具体问题。 到目前为止,我学到了什么: 点精灵绘图的基础知识 如何处理点精灵呈现为实心方块 如何改变点精灵的方向 如何使用点精灵的多个纹理 ,在这里靠近.. 那点精灵+精灵表已经在之前完成了,但是只能在OpenGL ES 2.0(不是1.0) 这是我想要实现的图表 我在哪里: 我有一组工作点精灵都使用同一个单一的方形图像。 例如:一个16×16的圆圈图像效果很好。 我有一个Objective-C方法,它会生成一个包含多个图像的精灵表的600×600图像。 我已经validation这是通过将整个精灵图片应用于用GL_TRIANGLES绘制的四边形来工作的。 我已经成功地使用了上面的方法来绘制精灵表的一部分到四边形。 我只是不能让它与点精灵一起工作。 目前,我正在生成纹理坐标,指向我定位的精灵表中的精灵中心。 例如:使用底部的图像; 星级:0.166,0.5; 云:0.5,0.5; 心脏:0.833,0.5。 码: 顶点着色器 uniform mat4 Projection; uniform mat4 Modelview; uniform float PointSize; attribute vec4 Position; attribute vec2 TextureCoordIn; varying vec2 TextureCoord; void main(void) { gl_Position = Projection * Modelview * Position; TextureCoord […]

如何在iOS平台上实现快速图像filter

我正在iOS应用程序中,用户可以应用一组照片filter。 每个filter基本上都是使用特定参数设置的Photoshop动作。 这一行动是: 级别调整 亮度/对比度 色相饱和度 单个和多个叠加 我在我的代码中重复了所有这些操作,使用循环遍历图像中所有像素的算术expression式。 但是,当我在iPhone 4上运行我的应用程序时,每个filter都需要大约3-4秒的时间才能应用,这是用户等待的时间。 图像大小为640 x 640像素,是我视图尺寸的2倍,因为它显示在视网膜显示屏上。 我发现我的主要问题是每次需要调整伽玛时调用pow()C函数的级别修改。 我使用浮动不当然,因为ARMv6和ARMv7双打慢。 试图启用和禁用拇指,并得到相同的结果。 在我的应用程序中最简单的filter的例子是运行相当快(2秒)。 其他filter包括更多的expression式和pow()调用,从而使它们变慢。 https://gist.github.com/1156760 我见过一些使用Accelerate Framework vDSPmatrix转换的解决scheme,以便快速修改图像。 我也看到了OpenGL ES解决scheme。 我不确定他们能否满足我的需求。 但可能这只是把我的变化集合转换成一个好的卷积matrix的问题? 任何意见将是有益的。 谢谢, 安德烈。

移动背景,iOS 5.1上的OpenGL ES崩溃

我有关于我的应用程序iOS的一个小问题。 当我使用iOS模拟器5.1 ipad / iphone应用程序正在工作,但是当我使用真正的iOS设备(iPad和iPhone 5.1) 点击主页button后,应用程序在后台移动时崩溃…出现此错误: libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient: 0x33240094: trap 0x33240096: nop 我发现这是OpenGL ES,它仍在计算和使应用程序崩溃,并发现这个函数:glFinish(); 但是,这仍然不工作在我的代码示例: – (void)applicationDidBecomeActive:(UIApplication *)application { [[CCDirector sharedDirector] resume]; } – (void)applicationWillResignActive:(UIApplication *)application { glFinish(); [[CCDirector sharedDirector] pause]; } 我认为问题就在这里有人谁有我的问题的想法? 谢谢 编辑: 问题解决了: – (void)applicationDidEnterBackground:(UIApplication *)application { [[CCDirector sharedDirector] stopAnimation]; } – (void)applicationWillEnterForeground:(UIApplication *)application { [[CCDirector sharedDirector] startAnimation]; } 也许这可以帮助别人x)

在iOS中渲染水画

我一直在iOS中使用OpenGL ,并使用glColor4f(r,g,b,a)设置颜色,然后在白色的UIImageView上绘制自己的颜色。 我基本上有一个画笔,然后移动到我的用户的触摸,然后它画在canvas上的颜色。 但是这种颜色需要水漆(如污迹的颜色) 有没有人了解/知道如何获得像这个应用程序水的颜色,以及如何背景UIImageView有纹理呢? https://itunes.apple.com/us/app/hello-watercolor/id539414526?mt=8 或在这里结帐水漆。 http://www.fiftythree.com/paper 我创造了一个赏金,因为我真的很难掌握如何从正常的颜色中获得如此stream畅的颜色。 即使你们把我指向正确的方向,或者如何得到water-paint效果的示例代码,这将是非常有帮助的^ _ ^ 作为一个奖励,如果你能指出如何让canvas看起来逼真并与油漆混合起来,那么也是有帮助的。 Blending/GLSL是否与这些有关? 有没有关于这个样品的项目?

如何直接更新像素 – 使用CGImage和直接CGDataProvider

实际问题 几个答案将解决我的问题: 我可以像CGContextDrawImage一样强制CGImage从直接数据提供者(使用CGDataProviderCreateDirect创build)重新加载它的数据吗? 或者有其他的方法可以设置self.layer.contents来做到这一点? 是否有一个CGContextconfiguration,或者我可以使用CGContextDrawImage一致呈现1024×768图像至less30 fps的技巧。 有没有人能够成功地使用CVOpenGLESTextureCacheCreateTextureFromImage实时缓冲区更新与他们自己的纹理数据? 我认为我最大的问题是创build一个CVImageBuffer因为我从Apples的纹理文档复制了其他属性。 如果任何人有更多的信息,这将是很棒的。 任何其他的指导方针,我怎么可以从内存中获取图像在30 fps的屏幕上。 背景(批次): 我正在做一个项目,我需要实时修改NPOT图像数据的像素(最低30帧/秒),并在iOS屏幕上绘制。 我的第一个想法是使用OpenGL与glTexSubimage2D进行更新,不幸的是,结果是非常慢(在iPad上6 fps),因为驱动程序将每帧的RGB数据转换为BGR。 所以发送它在BGR你说,我也是这样,但由于某种原因,你不能用GL_BGR去调用GL_BGR去图。 我知道一些缓慢是因为它是不是2图像数据的力量,但我的要求规定。 更多的阅读导致我CVOpenGLESTextureCacheCreateTextureFromImage但所有的例子是它使用直接相机input获取CVImageBufferRef我试图使用文档(没有官方,但只是头注释),使我自己的CVImageBuffer形成我的图像数据,但它不会使用这个(在debugging器中没有错误只是一个空的纹理),这使得我认为苹果公司专门build立了这个处理实时相机数据,除了IDK之外,还没有经过多lesstesting。 无论如何,放弃我的尊严,通过倾倒OpenGL,并将我的想法转换到CoreGraphics我被引导到这个问题最快的方式来绘制iPhone上的屏幕缓冲区 ,build议使用CGImage支持的CGDataProviderCreateDirect ,它允许您返回一个指向图像数据当CGImage需要它时,真棒吧? 那么它似乎不像广告一样。 如果我使用CGContextDrawImage那么一切正常。 我可以修改像素缓冲区,每一个绘图,它会像我们的数据提供程序那样请求图像数据,调用CGDataProviderDirectCallbacks的方法( Note:它们似乎有一个内置优化,如果它具有相同的地址如前所述)。 CGContextDrawImage是不是超快(约18 fps),即使禁用插值,从6 fps起。 苹果的文档告诉我使用self.layer.contents将比CGContextDrawImage快得多。 使用self.layer.contents适用于第一个作业,但CGImage从不要求像CGContextDrawImage那样从数据提供程序重新加载,即使在我调用[layer setNeedsDisplay] 。 在我引用的SO问题中,用户通过每一帧从数据源创build和销毁新的CGImage来解决这个问题,这是一个毫无希望的缓慢过程(是的,我尝试过了),所以真正的问题是时间了。 注意 :我已经剖析了所有这些操作,并且知道问题确实是OpenGL的glTexSubImage ,而CGContextDrawImage实际上是CoreGraphics的问题,所以没有“go profile”的回答。 演示这种技术的编辑源代码现在可以在http://github.com/narpas/image-sequence-streamingfind