问题标签 [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 投票
1 回答
601 浏览

opengl-es - 有没有办法在 IOS4 应用程序中链接 GLKit?

我构建了一个使用 GLKit 的应用程序,以便在屏幕上绘制 OpenGL 内容。我知道这是一个 iOS5 框架,但是我想知道是否有办法手动链接 glkit dylib。如果我不需要重建我的代码,我将不胜感激,因为 GLKit 更易于使用。

0 投票
2 回答
943 浏览

ios - 为什么我的精灵在纹理周围有一个深色阴影/线条/框架?

我正在用 Apple 的 GLKit 手启动 OpenGL 我在正确显示我的精灵时遇到了一些麻烦。问题是它们都被细细的黑线包围着。下面的屏幕截图显示了两个矩形,其中包含透明的 png 图像纹理(显然)。

在此处输入图像描述

围绕它们的黑色阴影绝对不是 pngS 的一部分。绿色 png 是在没有抗锯齿的情况下完成的,蓝色的 png 具有抗锯齿边框。如果我只画一个精灵,黑色边框也很明显。

代码的相关部分(希望如此......)是:

有什么想法吗?谢谢你。

0 投票
8 回答
8654 浏览

iphone - GLKTextureLoader 第一次加载某个纹理时失败,但第二次成功

我正在使用 GLKit 使用 OpenGL ES 2.0 制作 iPhone 应用程序。我正在使用 GLKTextureLoader 同步加载纹理。

问题是对于某个纹理,第一次加载失败。它给出了这个错误:

The operation couldn’t be completed. (GLKTextureLoaderErrorDomain error 8.)

对于此错误代码,苹果文档说明如下:

(不是很多)。

我可以在opengl上下文处于忙碌状态或类似情况时尝试加载纹理吗?

笔记:

  • 在加载这个纹理之前,我加载了其他纹理,并且这些纹理在第一次尝试时就起作用了。此外,完全相同的纹理文件将在第二次尝试时正常加载。
  • 应该有足够的可用视频内存,因为在此之前我只加载了几个纹理。
  • 纹理是带有 alpha 的未压缩 PNG,但我也尝试使用 TGA(24 位和 32 位)但没有运气。

欢迎任何想法,谢谢

编辑

更多信息:

  • opengl 上下文在我所有的屏幕之间共享。我这样做是为了让我的着色器和纹理在屏幕之间加载。

  • 当我进入第二个屏幕时,会发生上述问题。在第一个屏幕中,我毫无问题地绘制了带纹理的东西(虽然是其他纹理)。

  • 当我在游戏世界中加载我的内容(游戏实体)时,会发生上述问题。每个实体都尝试加载纹理。我有一个简单的缓存系统,它只加载一次纹理,然后为所有其他实体返回相同的 id。我正在以一种方法同步加载实体。第一个实体加载纹理失败,然后第二个实体加载成功,然后第三个实体获取缓存的 id。

  • 我正在调用加载实体方法,viewDidAppear并且在加载任何实体之前尝试添加睡眠 2 秒,但没有任何改变。

编辑:

纹理加载代码:

0 投票
1 回答
667 浏览

ios - OpenGLES 2.0(GLKit,iPhone):多边形部分遮盖了线框线

我正在尝试为 iOS 创建一个 3D 函数绘图仪。我已经成功地使用三角形条来渲染图形,并且还实现了通过线条绘制线框。但是,如果我使用 24 位(或 16 位无关紧要)深度缓冲区同时渲染两者,则线条会被多边形部分遮挡,使它们看起来非常细或完全消失。关闭 4xMSAA 并不能解决问题。有关示例,请参见下图。

部分被遮挡的线条示例

只画线条就可以了——线条的粗细恰到好处。如果我为线条禁用深度缓冲,它们也会正确绘制,但它们当然会出现在所有多边形之上(即确实被多边形隐藏的线条)。我还尝试降低多边形的透明度,但无济于事。稍微增加线条的 y 坐标会使它看起来更好,只要你从上面看它们,这样它们就确实在多边形的前面。

为了获得最佳性能,我在渲染之前将所有顶点数据和索引静态存储到顶点数组中。因此,我的渲染循环很短:

如何同时正确显示多边形和线框?我还想过只是将线条移动到更靠近相机现在恰好所在的位置,但我不知道如何在 OpenGL ES 中做到这一点,而且我不确定它是否会影响性能,因为这种转变取决于相机的当前位置。是否可以在绘制线条之前对线条动态应用转换?

0 投票
3 回答
6357 浏览

iphone - 释放由 GLKTextureLoader 分配的纹理(GLKTextureInfo 对象)

在 iOS 上开发的新手,特别是 iOS 5 上与 OpenGL 相关的新功能,所以如果我的任何问题都非常基本,我深表歉意。

我正在开发的应用程序旨在接收相机帧并通过 OpenGL ES 在屏幕上显示它们(图形人员将接管它并添加我知之甚少的实际 OpenGL 绘图)。该应用程序是 XCode4 开发的,目标是运行 iOS 5 的 iPhone4。目前,我使用了 ARC 和 GLKit 功能,除了将图像加载为纹理时出现内存泄漏外,一切正常。该应用程序很快就会收到“内存警告”。

具体来说,我想问一下如何释放分配的纹理

image是从相机框架构建的石英图像(来自苹果的示例代码)。我知道问题不在代码的那部分,因为如果我禁用分配,应用程序不会收到警告。

0 投票
2 回答
5433 浏览

ios - 使用 GLKit 旋转 OpenGL ES 对象

我正在尝试使用触摸在 iOS 中旋转 OpenGL 对象,但遇到了一些麻烦。我在这里抓住用户的触摸:

我在我的更新函数中使用它来执行旋转。现在,当我从左到右触摸时,我只是尝试从左到右旋转,然后在上下触摸时从前到后旋转。我得到了一个奇怪的组合轮换。这是代码:

0 投票
1 回答
1157 浏览

opengl-es - 使用 GLKMatrix4Translate 进行翻译似乎围绕着相机移动,而不是原点

我正在尝试使用户能够在 OpenGL ES 中向上/向下和向左/向右平移对象。我使用 GLKit 进行所有的绘图和运动。我启用了触摸事件来跟踪用户想要如何移动对象。我正在使用 GLKMatrix4Translate 来滑动平移对象,但由于某种原因它也有一个旋转组件。

我从用户的触摸中收集翻译点并将它们存储在 CGPoint 中:

我将 center.x 和 center.y 用于我想要翻译的 X 和 Y 位置。我用这一行进行翻译:

有任何想法吗?

0 投票
2 回答
3344 浏览

ios5 - 正确使用GLKBaseEffect

哎哟!

我一直在考虑更新一些旧的测试代码,试图重新了解添加到 GLKit 的新功能。到目前为止,我已经设法设置了一个 GLKViewController 并开始渲染一些基本形状,但一直在努力寻找任何关于 GLKBaseEffect 的体面信息。

GLKBaseEffect 文档指出:

在初始化时,您的应用程序首先创建一个 OpenGL ES 2.0 上下文并使其成为当前的。然后,它分配并初始化一个新的效果对象,配置它的属性,并调用它的 prepareToDraw 方法。绑定效果会导致着色器被编译并绑定到当前的 OpenGL ES 上下文。基本效果还需要应用程序提供顶点数据。要提供顶点数据,请创建一个或多个顶点数组对象。对于着色器所需的每个属性,顶点数组对象应启用该属性并指向存储在顶点缓冲区对象中的数据。

我正在努力辨别的是;

我渲染的每个“模型”都需要一个 GLKBaseEffect 对象吗?或者我是否为每个“场景”使用一个 GLKBaseEffect 并在调用 prepareToDraw 之前简单地更改属性?

我已经看过一些关于游戏引擎和渲染器的教程,它们只是为每个模型使用一个 GLKBaseEffect,但是如果可以使用单个实例来实现相同的效果,这似乎完全没有效率。

从阅读文档来看,这似乎是最好的方法,但考虑到我见过这么多人使用多个实例,我开始认为情况并非如此。

任何人都可以对此有所了解吗?GLKit 对 iOS(和我)来说还是相当新的,所以任何信息都将不胜感激。

0 投票
2 回答
336 浏览

iphone - GLKShaderBlockNode 泄漏从何而来?

在我正在开发的应用程序上运行 Leaks Instruments 后,我看到很多与GLKShaderBlockNode. 有些是GLKShaderBlockNode,有些是Malloc < varying sizes >,有些和__NSCFString

我在网上和 Apple 的开发资源中搜索过这个,但找不到关于GLKShaderBlockNode.

负责图书馆:GLKit

负责框架:-[GLKShaderBlockNode copyWithZone:]

0 投票
1 回答
764 浏览

iphone - OpenGL ES 不再显示对象

我是 OpenGL ES 编程的新手。我找到了一个很好的教程来开始,项目显示了一个正方形。然后,我尝试将大多数 OpenGL 代码从视图控制器中移出到一个模型对象中,该对象将存储顶点、颜色等,然后​​在视图控制器中我只需调用:

这样,如果我有几个模型要显示,那将是更多的练习。并且由于我这样做了,立方体不再显示在屏幕上。我想我指出了所有模型视图矩阵计算发生的更新方法的错误,因为当我注释掉这个方法时,立方体显示但它只是填满了屏幕。

这是加载方法:

这是渲染方法:

任何帮助,将不胜感激。谢谢。