问题标签 [glkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10919 浏览

ios - 使用 GLKit 的按需 OpenGL ES 渲染

我正在考虑转换我的 OpenGL 渲染代码以利用的一些功能GLKit(即异步纹理加载和由 提供的自动化GLKView/Controller)。但是,这些类似乎主要是为了适应人们使用动画循环进行渲染而设计的,而我正在使用按需渲染。此外,一些渲染是针对纹理而不是 GLKView 的帧缓冲区,所以我是否应该只寻找 GLKView 的子类并添加额外的 FBO?

这种设置有推荐的方法吗?我会期待一些类似的东西:

  • 将视图控制器设置preferredFramesPerSecond0,或者只是暂停帧更新?
  • 忽略glkViewControllerUpdateorglkView:drawInRect:方法,只在需要时绘制我需要的东西。
  • 将视图setNeedsDisplay与法线一起使用UIView以显示框架(bindDrawable鉴于我也将渲染到纹理,我是否需要调用?)。

如果这不是新 API 的设计目的,也许不值得付出努力?我希望文档比它更彻底。当 API 稍微“成熟”一点时,也许会提供更多示例......

谢谢

0 投票
5 回答
14555 浏览

ios - 使用 GLKit 绘图

我正在尝试使用 opengl 编写游戏,但是我在使用新的 glkit 类和 iOS 的默认模板时遇到了很多麻烦。

这样,缓冲区就会清除(变为灰色),但顶点数组中的任何内容都不会呈现。我不知道从这里开始做什么,并且由于技术年代久远,没有太多关于如何正确使用 glkit 的信息。

0 投票
1 回答
2377 浏览

ios - 调整 GLKView 的大小

当调整 aGLKView的大小时,会在缓冲区和 that 的上下文中发生一些幕后操作GLKView。在执行这些幕后操作所需的时间期间,绘图GLKView不会产生正确的结果。

在我的场景中,我启用了GLKViewthat setNeedsDisplay,因此每当我需要在屏幕上更新它的内容时,我只需-setNeedsDisplay调用 GLKView. 我是GLKView用来绘制图像的,所以如果我需要绘制不同大小的图像,我还需要更改GLKView.

问题:当我更改GLKView并调用setNeedsDisplay该视图的大小时,屏幕上的结果不正确。这是因为在GLKView尝试绘制新图像之前,尚未完成由新尺寸更改调用的幕后操作。

我通过调用:performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0而不是仅仅setNeedsDisplayGLKView. 这基本上强制主线程在调用之前等待所有幕后的 openGL 操作完成setNeedsDisplay。虽然这工作正常,但我想知道是否有更好的解决方案。例如,是否有一个 openGL 调用让线程在继续之前等待所有 openGL 操作完成?

0 投票
1 回答
1032 浏览

testing - IOS5 GLKit GLView 和 Hit 测试

在新的 GLKit GLView 参考中,强调了以下警告:

重要提示:您的绘图方法应该只修改帧缓冲区对象的内容。切勿尝试从底层帧缓冲区对象读取像素信息,修改或处置帧缓冲区对象,或通过调用 OpenGL ES 函数读取其其他属性。而是依赖 GLKView 类提供的属性和方法

以前,使用 EAGLView 发布的最佳实践是针对命中测试,其中包括使用 glReadPixels 使用渲染但未呈现的帧缓冲区。

使用 GLKView 似乎唯一接近的是“-snapshot”调用以从渲染中生成 UIImage 对象。然后挖出像素。这似乎非常低效。

是否有使用新的 GLKit 功能进行命中测试的“最佳实践”?似乎可以绑定和重新绑定单独的帧缓冲区,但我不确定 GLKView 参考中的戏剧性警告是什么意思。

关于使用 GLKit 时命中测试的最佳方法的任何想法?

0 投票
1 回答
741 浏览

ios - 在 OpenGL 中制作一张“上面有文字的纸”(特别是在 iOS 5 上)

我从未做过 OpenGL,但我正在使用我正在练习的 AR 应用程序中寻找关于这个特定问题的一些指示。

我想制作一个带有“平面矩形”的应用程序,以及写在矩形表面上的文本。在视觉上,我在想象一张纸上写着文字的东西。每次应用程序启动时,文本都会有所不同(文本是从 plist 文件中提取的)。

用户将能够从各个方面查看纸张,就像他面前挂着一张纸一样。

这在OpenGL中是微不足道的吗?我怎么能开始?

对于这个开放式的问题,我很抱歉,但我想了解一下这种事情是如何完成的。

查看 Xcode 示例项目中的 OpenGL 模板源代码,我看到有一大堆顶点。我认为要创建一个“平面”矩形,我基本上只需要删除或使 z 轴为零。然后将附加到平面矩形表面的动态文本......我不知道该怎么做......

0 投票
2 回答
1558 浏览

iphone - GLKViewController:不正确的 fps

希望那里有一些 GLKViewController 专家,因为我有一些问题 :)

只是对我的应用程序的快速描述。我有一个 UINavigationController 在其中推送不同的屏幕。

在某些时候,我进入了我的游戏屏幕,它是 UINavigationController 的子类。在这个屏幕中,viewDidLoad我手动创建了一个 EAGLContext、GLKView 并实例化了一个新的 GLKViewController(以处理我的更新和绘制调用)。

我将首选 fps 设置为 30。

问题是前 3-4 个更新调用带有正确的 DT,但是我有 2-3 帧,它们之间有 1 秒。我使用 测量 DT controller.timeSinceLastUpdate。所以我喜欢:

在此之后,我只得到有效的 DT 时间。我不知道为什么这些帧有这种延迟。我测量了我在更新和绘制方法中花费的时间,距离 1 秒还差得很远。

另外,我没有加载任何纹理/创建任何几何图形。一切都是在加载时完成的,因为它是一个相当小的游戏。

此外,如果我弹出游戏屏幕控制器,然后推回游戏屏幕的另一个实例,这个新的 GLKViewController 只会大约每 1 秒调用一次我的更新方法。

有人在使用 GLKViewController 时遇到帧率问题吗?

谢谢,

0 投票
1 回答
3798 浏览

iphone - GLKit & 为纹理添加色彩

我在使用 GLKit 为 PNG 图像着色时遇到问题。

我有一个白色的 PNG 图像,我将其加载到应用程序中,然后使用它来创建纹理:

纹理创建时没有错误。

但是,当我想在激活混合的情况下渲染纹理时,颜色似乎被忽略了,我得到了一个白色的图像。当我在 OpenGL1 中执行此操作时,我没有遇到任何问题,即图像会拾取在glColor4f(). 这是我的渲染代码:

有人可以帮忙解决这个问题吗谢谢

礼萨

0 投票
1 回答
2009 浏览

ios - OpenGL ES 2 / iOS GLKit 的设计建议

我想使用新的 GLKit 框架构建一个应用程序,我需要一些设计建议。我想创建一个应用程序,最多可以显示几千个“砖块”(具有非常简单几何形状的对象)。大多数将具有相同的纹理,但多达几百个将具有独特的纹理。我希望砖块每隔几秒钟出现一次,移动到位然后保持原位(在世界坐标中)。我想模拟一个位置和方向由用户手势控制的相机。

我需要的建议是关于如何组织代码。我希望我的模型是一个积木的集合,其中包含的不仅仅是与它们相关的图形数据:

  • 将类似视图的对象与每个手柄几何体、纹理等相关联是否有意义?
  • 每块砖都应该有自己的顶点缓冲区吗?
  • 每个人都应该有自己的 GLKBaseEffect 吗?
  • 我正在寻找帮助组织在设置过程中应该做什么对象,然后渲染。

我希望我可以保持接近典型的 MVC 模式,我的 GLKViewController 观察模型状态变化,根据手势控制眼睛坐标等等。

如果您能提供一些建议或引导我找到一个好例子,我将不胜感激。提前致谢!

0 投票
1 回答
1142 浏览

ios - iOS GLKViewController 嵌套 GLKit 视图

我使用 OpenGL 游戏模板作为我的应用程序的起点,出于各种原因,我需要将我正在绘制的 GLKView 作为主视图的子视图。我尝试设置“self.view = glView”,其中 glView 是嵌套的 GLKit 视图并将该视图链接到我拥有的 GLKViewController 子类的视图出口,但我没有运气。谁能告诉我如何让 GLKViewController 控制该视图控制器主视图的子视图的 GLKView?提前致谢

0 投票
1 回答
4120 浏览

objective-c - OpenGL ES 交错顶点缓冲区对象

我一直在研究适用于 iOS 的新 OpenGL 框架,恰当地命名为 GLKit,并且一直在尝试将一些现有的 OpenGL 1.0 代码移植到 OpenGL ES 2.0,只是为了让我的脚趾浸入水中并掌握事物。

在阅读了 API 和 Apple 提供的大量其他最佳实践和 OpenGL 文档之后,我已经根深蒂固地认为我应该使用顶点缓冲区对象并使用“元素”,或者更确切地说,顶点索引。似乎有很多提到通过在必要时使用填充来优化内存存储,但这可能是另一天的对话;)

不久前,我在 SO 上阅读了关于使用 NSMutableData 优于经典 malloc/free 的好处,并想在编写我的 VBO 时尝试采用这种方法。到目前为止,我已经设法将一个片段拼凑在一起,看起来我正朝着正确的方向前进,但我并不完全确定 VBO 应该包含多少数据。这是我到目前为止所得到的:

目前,交错的顶点数据足以存储每个顶点的顶点、法线、颜色和纹理坐标。我的印象是顶点和索引的数量相同,但实际上显然不是这种情况,因此,索引是 VBO 的一部分,而不是 InterleavingVertexData。

问题更新:

在设法使其进入工作状态后,我已经更新了上面的代码。希望它将来对某人有用。

现在我已经设法设置了所有内容,我无法通过渲染绑定到 VBO 的内容来获得预期的结果。这是迄今为止我将数据加载到 OpenGL 中的代码:

以及渲染一切的代码:

虽然我的 iPhone 还没有出现独角兽从眼睛中射出彩虹的绝妙图形,但我无法在不扯掉头发的情况下完整地渲染一个简单的形状。

从渲染来看,每个形状似乎只有 1/3 被绘制,可能是 1/2,具体取决于视角。似乎罪魁祸首是传递给 glDrawElements 的 count 参数因为摆弄这个有不同的结果,但我已经阅读了文档并一遍又一遍地检查了这个值,它确实期望索引的总数(这就是我目前通过)。

正如我在最初的问题中提到的那样,我对 VBO 目前或者更确切地说,对实施而不是至少对概念感到困惑。如果有人愿意关注我的实现,那将是非常棒的,因为我确信我在此过程中的某个地方犯了一个新手错误,但你知道当你盯着某个东西几个小时时会发生什么没有进展就结束了。

谢谢阅读!