问题标签 [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.
ios - 对触摸反应良好
我正在开发一个音乐应用程序,所以我真的不能批准任何延迟。
我正在使用心爱的 touchesBegan/Moved/Ended 来处理我的触摸。一切都很顺利,我设法合成了一个音调(使用 AudioUnit)并在手指下显示了一个发光(使用 GLKit),如果同时击中的音符/触摸少于 4-7 个,这一切都很好,然后它会发疯并使应用程序卡住。
我明白这是因为我正在做很多工作(使用 GLKit 界面和我为合成引擎制作的界面)并且我需要一种方法来修复它。
我的代码是这样构建的:
我在touchesEnded中做完全相反的事情。
因此,在我试图让它更好地工作时,我尝试将 GCD 用于 GLKit 的东西,这样它就可以异步发生,它起作用了,但有时我会看到屏幕上出现发光,因为它不在数组中时touchesEnded 试图删除它。
所以这没有用,我有点无能为力,如果有人能帮助我,我会很感激。
ios - GLKit 混合两种纹理
我正在尝试转换 OGL ES 1.1。GLKit 的代码。GLKit 提供了一对纹理槽:
- 纹理2d0
- 纹理2d1
每个纹理都有一个环境模式:
- GLKTextureEnvModeReplace,
- GLKTextureEnvModeModulate,
- GLKTextureEnvModeDecal
通常,您将 texture2d1 留空,然后设置 texture2d0。我假设 - 从阅读 Apple 的文档中 - 2d1 用于混合/组合/修改纹理。由于 GLKit “仅仅”位于着色器之上,并且每个着色器都有一对纹理槽是标准的 - “传入”槽表示材质上已有的内容,“修改”槽表示着色器的内容将用作修改材料的参数。
但这似乎不起作用。
我试过了:
...我得到的只是黑色的无纹理。放置到 0 中的任一纹理(1 中没有任何内容)都可以正常工作。第二个纹理是 alpha 到白色的阴影,其中第一个纹理是不透明的,但具有相当丰富的调色板。
我真正想做的是开始有效地应用动态生成/更新的混合。例如:
- 加载基础纹理
- 加载第二个纹理
- 加载在它们之间混合的混合蒙版
- ...逐帧更新混合蒙版。无需重新上传前两个纹理
注意:我不想扔掉 GLKit 并为此编写自定义着色器。我想了解 GLKit 是如何工作的——从外观上看,对于像这样的简单事情,维护起来应该比我到处写一堆着色器要容易得多。
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?
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 的第二次时都会出错程序的一部分。我有一种感觉,这与不放弃与上下文和效果有关的某种资源有关,但我找不到有关删除上下文和效果的任何信息(可能是因为您不需要,但我不确定)。
我希望有人遇到同样的问题并且可以回答我的问题,我希望这不仅仅是一个愚蠢的错误,因为我已经尝试解决这个问题一段时间了:)
谢谢
ios - 使用情节提要设置 GLKView 的初始大小
我正在尝试设置 GLKView 的初始大小(基本上,我希望它与屏幕的大小完全相同,尽管存在标签栏)。因为我使用的是故事板,所以 GLKView 是在 GLKViewController init 方法中自动创建的(不确定,它没有真正记录,但我认为是这样)。在 GLKViewController 我只有 viewDidLoad 方法,这里是:
所以,如果我不使用故事板,我会写这样的东西:
但是在使用情节提要时,我没有机会这样做:
我试图更改现有视图的框架,创建一个新的 GLKView,然后将其分配给 viewController.view - 没有结果。
是否有可能以不同的方法设置或更改 GLKView 的大小等?
opengl - OpenGL场景坐标到屏幕坐标
我无法将我的 OpenGL 场景坐标转换为我的屏幕坐标。
我想我需要将我的坐标与模型视图矩阵相乘,然后与投影矩阵相乘以获得 ndc。但我得到了奇怪的坐标。
这是我的一段代码
任何的想法 ?
objective-c - 无法用简单的立方体显示 VBO,似乎是缓冲区的问题
试图在 raywenderlich.com 上修改这个OpenGL 和 GLKit 教程,我试图从波前 obj 文件渲染一个立方体,没有每个顶点的颜色信息和表面法线。但是被渲染的东西看起来一点也不像立方体。
为了解析一个 obj 文件,我有一个方法(createDrawable),它通过 obj 并将信息保存到一个结构(Drawable)中,该结构包含四件事:顶点缓冲区、索引缓冲区、对象中的面数和变换矩阵目的。(这里是头文件、.m 文件和.obj 文件。)
对于渲染,我使用另一种方法(renderDrawable)绑定对象的缓冲区,设置指向它们的指针,然后使用 glDrawElements(..) 进行渲染。
我认为我对缓冲区(此处显示的 createDrawable 的一部分和 .m 文件中的 renderDrawable 的一部分)做错了,但我就是不知道它是什么。
ios - 是否可以访问 GLKTextureInfo 中的二进制图像数据?
GLKTextureInfo 或某些相关对象中是否提供原始图像数据?
是否可以基于此类原始数据图像缓冲区在 GLKit 中创建纹理?像在非 ES OpenGL 中一样,使用 glTexImage2D()?
ios - GLKit 的 GLKBaseEffect 和自定义着色器
我一直在研究我遇到的这个问题,但我似乎无法很好地理解它来解决它,所以我想我不妨把它扔在那里,聪明的一群可能会有一些想法。:P
基本上我已经在 iPhone 项目上工作了一段时间,在那里我可以奢侈地使用所有最新的框架和目标 5.1。所以我一直在使用 GLKit 和 GLKBaseEffect 对我来说效果很好。我开始使用 GLKBaseEffect 而不是编写自己的着色器的原因是我不太了解 glsl。然而,要求变得更加精确,基本效果似乎不再削减它。
由于我已经在使用基础效果进行所有变换,因此我希望我可以保持基础效果完好无损,但如果有任何意义,可以在顶部添加 glsl 类型的着色器。
我的旧方法看起来像这样(这是在一个循环中渲染所有对象,其中一个对象包含变换、网格和其他一些对这个问题不太重要的东西,比如纹理、材质等)
这里我们获取一个对象来渲染和变换(即平移、旋转和缩放)对象,然后我们渲染它,渲染本身获取对象的网格,绑定缓冲区并渲染它。
到目前为止,一切都很好。
然而,我想做的是,在[obj render];
调用过程中,我希望对象也能做一些事情,比如glUseProgram(someProgram);
添加更专业的着色器代码。
我想有人可能会争辩说我正在尝试为我的顶点着色器使用基本效果,并希望为我的片段着色器使用“普通”着色器。至少这是我想我想做的。
我一直在尝试一些事情。
我试图只创建片段着色器并glUseProgram
在其上创建,但是它说我在设置和编译时需要一个顶点和一个片段着色器。我还尝试创建一个空的顶点着色器,结果不是很好,我不知道会发生什么,但我猜它会否决基本效果。
最后,我倾向于接受最好放弃基础效果并一直编写自己的着色器。我只是觉得窗外有很多工作,所以我想看看我能节省多少。
我明白我对着色器的理解是给我带来最多问题的部分,所以请耐心等待这个事实。