问题标签 [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 回答
266 浏览

ios - 对触摸反应良好

我正在开发一个音乐应用程序,所以我真的不能批准任何延迟。

我正在使用心爱的 touchesBegan/Moved/Ended 来处理我的触摸。一切都很顺利,我设法合成了一个音调(使用 AudioUnit)并在手指下显示了一个发光(使用 GLKit),如果同时击中的音符/触摸少于 4-7 个,这一切都很好,然后它会发疯并使应用程序卡住。

我明白这是因为我正在做很多工作(使用 GLKit 界面和我为合成引擎制作的界面)并且我需要一种方法来修复它。

我的代码是这样构建的:

我在touchesEnded中做完全相反的事情。

因此,在我试图让它更好地工作时,我尝试将 GCD 用于 GLKit 的东西,这样它就可以异步发生,它起作用了,但有时我会看到屏幕上出现发光,因为它不在数组中时touchesEnded 试图删除它。

所以这没有用,我有点无能为力,如果有人能帮助我,我会很感激。

0 投票
1 回答
1038 浏览

ios - GLKit 混合两种纹理

我正在尝试转换 OGL ES 1.1。GLKit 的代码。GLKit 提供了一对纹理槽:

  1. 纹理2d0
  2. 纹理2d1

每个纹理都有一个环境模式:

  1. GLKTextureEnvModeReplace,
  2. GLKTextureEnvModeModulate,
  3. GLKTextureEnvModeDecal

通常,您将 texture2d1 留空,然后设置 texture2d0。我假设 - 从阅读 Apple 的文档中 - 2d1 用于混合/组合/修改纹理。由于 GLKit “仅仅”位于着色器之上,并且每个着色器都有一对纹理槽是标准的 - “传入”槽表示材质上已有的内容,“修改”槽表示着色器的内容将用作修改材料的参数。

但这似乎不起作用。

我试过了:

...我得到的只是黑色的无纹理。放置到 0 中的任一纹理(1 中没有任何内容)都可以正常工作。第二个纹理是 alpha 到白色的阴影,其中第一个纹理是不透明的,但具有相当丰富的调色板。

我真正想做的是开始有效地应用动态生成/更新的混合。例如:

  1. 加载基础纹理
  2. 加载第二个纹理
  3. 加载在它们之间混合的混合蒙版
  4. ...逐帧更新混合蒙版。无需重新上传前两个纹理

注意:我不想扔掉 GLKit 并为此编写自定义着色器。我想了解 GLKit 是如何工作的——从外观上看,对于像这样的简单事情,维护起来应该比我到处写一堆着色器要容易得多。

0 投票
1 回答
2199 浏览

iphone - OpenGL ES 2.0 GLKit GL_LINE_SMOOTH error

I'm using drawing a glDrawArrays to draw a GL_LINE_STRIP and want to make them smooth. I've seen on a couple questions here people recommend using glEnable(GL_LINE_SMOOTH) and glHint(GL_LINE_SMOOTH_HINT, GL_NICEST), but when I do so, I'm getting an error. Here's my code:

If I uncomment either (or both) of those lines, I get a GL ERROR. Any thoughts?

0 投票
2 回答
1816 浏览

objective-c - GLKBaseEffect prepareToDraw GL 错误:0x0501

所以我一直在做一些 iphone 开发,里面有一些 OpenglES,但是当我在效果上调用 prepareToDraw 时,我遇到了一个相当奇怪的错误。简而言之,我的程序模拟掷骰子(尝试学习objective-c和opengl)。该程序在大多数情况下运行良好,我可以使用我为我的应用程序编写的所有内容(其物理错误但稍后会修复)。在我使用了包含 OpenGL 的部分之后,问题就出现了。

该程序包含 2 个菜单,您必须通过才能到达使用 OpenGL 的屏幕,一旦您使用了应用程序 OpenGL 部分并返回上一个菜单,然后再次尝试返回 OpenGL 部分,我得到一个打印出 GL ERROR: 0x0501。根据我的效果,我将其缩小为由 prepareToDraw 方法引起的。关于它的另一个奇怪的部分是,如果我回去,然后再前进,OpenGL 再次工作,并且可以一次又一次地重复,以便它在你进入 OpenGL 部分时每两次工作和中断。

我一直在寻找与我类似的问题,但每次它都与加载不是二次幂纹理的纹理有关,这对我没有帮助,因为我什至还没有使用纹理,只是彩色顶点。

我粘贴了我的两个代码文件,问题应该出在哪里

Dice.m:http ://pastebin.com/ze1DEEzs 在 draw 方法中,您会看到我的打印输出已经缩小了问题所在,即 prepareToDraw 方法。(第 308 行)

RollViewController.m:http ://pastebin.com/VycwAh3R 这个文件是我设置效果和上下文等的地方,所以我必须在这里做错了,导致 prepareToDraw 方法在我每次运行 OpenGL 的第二次时都会出错程序的一部分。我有一种感觉,这与不放弃与上下文和效果有关的某种资源有关,但我找不到有关删除上下文和效果的任何信息(可能是因为您不需要,但我不确定)。

我希望有人遇到同样的问题并且可以回答我的问题,我希望这不仅仅是一个愚蠢的错误,因为我已经尝试解决这个问题一段时间了:)

谢谢

0 投票
1 回答
2650 浏览

ios - 使用情节提要设置 GLKView 的初始大小

我正在尝试设置 GLKView 的初始大小(基本上,我希望它与屏幕的大小完全相同,尽管存在标签栏)。因为我使用的是故事板,所以 GLKView 是在 GLKViewController init 方法中自动创建的(不确定,它没有真正记录,但我认为是这样)。在 GLKViewController 我只有 viewDidLoad 方法,这里是:

所以,如果我不使用故事板,我会写这样的东西:

但是在使用情节提要时,我没有机会这样做:

我试图更改现有视图的框架,创建一个新的 GLKView,然后将其分配给 viewController.view - 没有结果。

是否有可能以不同的方法设置或更改 GLKView 的大小等?

0 投票
2 回答
1847 浏览

opengl - OpenGL场景坐标到屏幕坐标

我无法将我的 OpenGL 场景坐标转换为我的屏幕坐标。

我想我需要将我的坐标与模型视图矩阵相乘,然后与投影矩阵相乘以获得 ndc。但我得到了奇怪的坐标。

这是我的一段代码

任何的想法 ?

0 投票
2 回答
391 浏览

objective-c - 无法用简单的立方体显示 VBO,似乎是缓冲区的问题

试图在 raywenderlich.com 上修改这个OpenGL 和 GLKit 教程,我试图从波前 obj 文件渲染一个立方体,没有每个顶点的颜色信息和表面法线。但是被渲染的东西看起来一点也不像立方体。

为了解析一个 obj 文件,我有一个方法(createDrawable),它通过 obj 并将信息保存到一个结构(Drawable)中,该结构包含四件事:顶点缓冲区、索引缓冲区、对象中的面数和变换矩阵目的。(这里是文件、.m 文件.obj 文件。)

对于渲染,我使用另一种方法(renderDrawable)绑定对象的缓冲区,设置指向它们的指针,然后使用 glDrawElements(..) 进行渲染。

我认为我对缓冲区(此处显示的 createDrawable 的一部分和 .m 文件中的 renderDrawable 的一部分)做错了,但我就是不知道它是什么。

0 投票
1 回答
288 浏览

ios - 是否可以访问 GLKTextureInfo 中的二进制图像数据?

GLKTextureInfo 或某些相关对象中是否提供原始图像数据?

是否可以基于此类原始数据图像缓冲区在 GLKit 中创建纹理?像在非 ES OpenGL 中一样,使用 glTexImage2D()?

0 投票
2 回答
4257 浏览

ios - GLKit 的 GLKBaseEffect 和自定义着色器

我一直在研究我遇到的这个问题,但我似乎无法很好地理解它来解决它,所以我想我不妨把它扔在那里,聪明的一群可能会有一些想法。:P

基本上我已经在 iPhone 项目上工作了一段时间,在那里我可以奢侈地使用所有最新的框架和目标 5.1。所以我一直在使用 GLKit 和 GLKBaseEffect 对我来说效果很好。我开始使用 GLKBaseEffect 而不是编写自己的着色器的原因是我不太了解 glsl。然而,要求变得更加精确,基本效果似乎不再削减它。

由于我已经在使用基础效果进行所有变换,因此我希望我可以保持基础效果完好无损,但如果有任何意义,可以在顶部添加 glsl 类型的着色器。

我的旧方法看起来像这样(这是在一个循环中渲染所有对象,其中一个对象包含变换、网格和其他一些对这个问题不太重要的东西,比如纹理、材质等)

这里我们获取一个对象来渲染和变换(即平移、旋转和缩放)对象,然后我们渲染它,渲染本身获取对象的网格,绑定缓冲区并渲染它。

到目前为止,一切都很好。

然而,我想做的是,在[obj render];调用过程中,我希望对象也能做一些事情,比如glUseProgram(someProgram);添加更专业的着色器代码。

我想有人可能会争辩说我正在尝试为我的顶点着色器使用基本效果,并希望为我的片段着色器使用“普通”着色器。至少这是我想我想做的。

我一直在尝试一些事情。

我试图只创建片段着色器并glUseProgram在其上创建,但是它说我在设置和编译时需要一个顶点和一个片段着色器。我还尝试创建一个空的顶点着色器,结果不是很好,我不知道会发生什么,但我猜它会否决基本效果。

最后,我倾向于接受最好放弃基础效果并一直编写自己的着色器。我只是觉得窗外有很多工作,所以我想看看我能节省多少。

我明白我对着色器的理解是给我带来最多问题的部分,所以请耐心等待这个事实。

0 投票
1 回答
316 浏览

ios - 尝试使用正交投影绘制正方形并遇到问题

我在 iPhone 上运行此代码,并使用 Apple 为矩阵提供的 GLKit。在 iPhone 上,我只有一个灰色的屏幕,但我应该在角落有一个方形绘图,但它没有显示出来。

我没有看到我所做的有任何问题,并且调用 OpenGL 的 getError 返回 GL_NO_ERROR。

我的来源: