草庐IT

ios - 在 iOS 上使用具有多个 VBO 和 IBO(多个对象)OpenGLES 2 的 VAO 进行绘制

我对多个对象(大约200个对象,其中15个对象一次可见,每个对象都有自己的顶点和索引缓冲区)使用VAO(顶点数组对象)感到有些困惑。下面是我的渲染函数-(void)glkView:(GLKView*)viewdrawInRect:(CGRect)rect{glClearColor(0.50f,0.50f,0.50f,1.0f);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);[superdrawLines];for(inti=0;i0){self.paused=NO;}else{self.paused=YES;}}这工作得很好。在Ope

ios - OpenGL ES 1.1 中 glDrawPixels() 的等价物是什么?

谁能告诉我glDrawPixels()的等价物在OpenGLES1.1中? 最佳答案 你被迫使用纹理。 关于ios-OpenGLES1.1中glDrawPixels()的等价物是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/708760/

c++ - iPad/X 平台上的 OpenGL ES 应用 : C++ or Objective-C?

我希望这有一个技术(而不是宗教)答案,但我想知道我是否应该使用Objective-C或C++在iPad上创建OpenGLES应用程序?由于最终目标是在Windows和OSX上编译它,我倾向于使用C++(并且只使用ObjC来处理我必须做的事情:AppDelegate等),但我有零具有Objective-C开发经验。我可以与Objective-C中的C++类交互吗?使用ObjC而不是C++有什么令人信服的理由吗?或者我应该只使用普通的旧C语言吗? 最佳答案 您可以,它称为Objective-C++,您需要做的就是确保您的源文件具有.mm

objective-c - iOS OpenGL 使用 glTexImage2D 的参数来制作 UIImage?

我正在处理分配给我的项目的一些现有代码。我成功调用了glTexImage2D,如下所示:glTexImage2D(GL_TEXTURE_2D,0,texture->format,texture->widthTexture,texture->heightTexture,0,texture->format,texture->type,texture->data);我想使用传递给glTexImage2D的变量创建一个图像(最好是CGImage或UIImage),但不知道是否这是可能的。我需要从OpenGLView创建许多连续图像(每秒很多图像)并保存它们供以后使用。我应该能够使用我在glTe

ios - 如何在 iOS(增强现实应用程序)的实时预览相机上制作 OpenGl ES 的屏幕截图?

我是Objective-C和iOS编程的初学者。我花了一个月的时间来了解如何使用AvFoundation在实时相机预览之上使用OpenGLES(1.1版)显示3D模型。我正在iPad上做一种增强现实应用程序。我处理输入帧并实时显示3D对象叠加与相机预览。这些很好,因为有很多关于这些东西的网站和教程(也感谢这个网站)。现在,我想截取整个屏幕(以相机预览为背景的模型)作为图像并显示在下一个屏幕中。我在这里找到了一个非常好的演示,http://cocoacoderblog.com/2011/03/30/screenshots-a-legal-way-to-get-screenshots/.他

objective-c - 如何在不减慢游戏速度的情况下在 iPhone OpenGL ES 粒子系统中绘制 1000 多个粒子(具有独特的旋转、缩放和 alpha)?

我正在使用OpenGLES1.1为iPhone开发游戏。在这个游戏中,我有在角色被击中时从角色身上散发出的血粒子,所以屏幕上可以同时出现1000多个血粒子。问题是当我要渲染超过500个粒子时,游戏的帧率会急剧下降。目前,每个粒子都使用glDrawArrays(..)渲染自己,我知道这是速度变慢的原因。所有粒子共享相同的纹理图集。那么减少绘制许多粒子的速度的最佳选择是什么?以下是我找到的选项:将所有血液粒子组合在一起并使用单个glDrawArrays(..)调用渲染它们--如果我使用这种方法,每个粒子都有一种方法有自己的旋转和阿尔法?还是在使用此方法时所有这些都必须具有相同的旋转?如果我

ios - 具有深度测试的 OpenGL 点 Sprite - 混合问题?

我正在渲染点Sprite(在iOS上使用OpenGLES2.0)作为用户的绘图笔画。我将这些点存储在顶点缓冲区对象中,这样我就需要执行深度测试,以便在提交绘图时Sprite以正确的顺序出现。我在渲染这些绘图笔触时看到了一个奇怪的效果,如下面的屏幕截图所示:请注意蓝色描边边缘周围的背景色“边框”,它绘制在绿色之上。用户在绿色笔划之后绘制了蓝色笔划,但是当重绘VBO时,蓝色笔划首先被绘制。在绘制绿色笔划时,深度测试开始,发现它应该在蓝色笔划后面,所以这样做,一些成功。在我看来是某种混合问题,或者与片段着色器中错误计算颜色有关?所有笔画的边缘都应该是透明的,但是看起来片段着色器在处理这些片段

ios - OpenGL 背景清晰颜色渗入透明纹理

我正在使用OpenGL和C++编写一个简单的2D框架,现在遇到了与透明纹理和混合相关的问题。我已将我的问题简化为以下内容。我有两个纹理:地砖和鱼骨。后者包含透明像素。我将我的OpenGL清晰颜色设置为“透明绿色”并启用深度测试和混合,如下所示:glClearColor(0,1,0,0)glEnable(GL_DEPTH_TEST);glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);通过两次调用glDrawElements(),我画了鱼,然后画了地板。鱼的Z值较高,因此应放置在地砖的前面。Thisist

ios - 获取 iOS 应用程序使用的实际 OpenGL 纹理内存量

SO中有几个问题与这个问题类似,但它们似乎都没有解释在设备上获取iOS应用程序使用的实际OpenGL纹理内存的明确方法。我知道如何手动计算我的纹理在上传到OpenGL时将使用多少内存。我想知道是否可以从设备中获取确切的OpenGL使用内存量。我想避免查看Instruments上内存监视器小部件中的实际内存和虚拟内存列(我的理解是这些聚合纹理内存和应用程序的常规内存)。我认为这类似于显示的方法here或here.我不介意纹理内存是使用任何外部工具还是以编程方式获得。但我只想要设备报告的真实OpenGL内存,而不是聚合。此外,有人可以解释一下“虚拟内存”列在iOS上的确切含义吗?我想我理解

ios - OpenGL 在 iOS 12 中被弃用,如何在 iOS 12+ 设备上安全地继续使用 openGL?

Apple表示,使用OpenGLES构建的应用程序将继续在iOS12中运行,但OpenGLES在iOS12中已弃用。以前使用OpenGLES的游戏和图形密集型应用程序现在应该采用Metal。但我不想将我的应用程序从OpenGL迁移到Metal,因为它是适用于Android的相同代码,而且我不想创建两个单独的分支,所以我该怎么做才能在未来的iOS版本中继续使用OpenGL? 最佳答案 你或多或少不会。Apple已明确表示他们无意在其控制的任何平台上进一步支持OpenGLES。将来,你将使用Metal,否则将不会有加速的3D图形。这些将