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

objective-c - 嵌套的 GLKView 和 GLKViewController

我是 OpenGL ES 的新手,我正在尝试使用 GLKit。我的目标是开发一个非常简单的应用程序,以便对 OpenGL 有一个好的感觉。

我从 Apple 的示例代码(OpenGL ES 游戏)开始,并实现了基本的手势控制:平移、缩放、旋转(轨迹球算法)。

现在已经完成了,我想使用不同的投影矩阵,我开始设计一个用户界面来做到这一点:


(来源:canardpc.com

唯一的问题是当 GLKViewController 中的顶视图不是 GLKView 时它不起作用。

是否可以将 GLKView 作为子视图并仍然保留 GLKViewController 的酷特性?

谢谢你。

0 投票
1 回答
865 浏览

iphone - Objective C 应用程序中的常量、随机和莫名其妙(无论如何对我来说)EXC BAD ACCESS

我启用了自动引用计数和僵尸...

我一直在代码中的不同点获得 EXC BAD ACCESS,大多数时候没有来自僵尸的进一步信息。

目标是在屏幕上绘制一个矩形,上面带有从图像加载的纹理。它确实有效!但通常它已损坏(图像和矢量),然后我经常收到 exc bad access 警告。

我有这种结构...

应用委托类声明:

然后将window变成一个属性并合成。

使用选项完成启动:

AppDelegate 充当 OpenGL 委托,OpenGL 在类中调用一个名为“render”的函数,然后调用 [background render];

我的 GWBackgroundScene 类:

初始化:

并具有处理矢量和纹理信息这两个功能

然后渲染函数(由 OpenGL 通过其委托(App 委托)调用)使用:

  1. 质地:

    /li>
  2. 自我顶点:

    /li>
  3. self.textureCordinates

    /li>

我在做什么有什么明显的记忆问题?

非常感谢

0 投票
2 回答
2559 浏览

iphone - 将 GLKView 与 UIBUtton 相结合

我正在寻找一个示例应用程序,它在同一窗口中使用 Apple 的新 GLKView 对象以及 UIButton 等其他 UIObjects。我正在从互联网上搜索,我发现的更像是那个帖子并且没有得到回答:

在我正在创建的应用程序中,我需要在同一个视图中使用带有 2 个 UIButton 的 GLKView。根据我按下的按钮,我更改了 GLKView 的参数。ViewController 应该如何处理 GLKView?我应该有一个与实际视图控制器分开的 GLKViewController 来仅控制 GLKView 吗?

我试图让我的视图控制器继承 GLKViewController。

并在viewDidLoadFunction中设置名为OpenGLView的GLKView:

构建顺利,但是当我运行应用程序时它崩溃说:

'NSInternalInconsistencyException',原因:'-[GLKViewController loadView] 加载了“2-view-5”笔尖,但没有获得 GLKView。

有人能帮我吗?我正在为此搜索示例,但找不到

乔迪·P

0 投票
3 回答
2537 浏览

ios - 从 CoreMotion 的姿态的 rotationMatrix 中分离并移除水平旋转

我正在制作类似于增强现实应用程序的东西,其中我有一个 OpenGL 场景,无论 iOS 设备如何移动,我都希望它与重力保持一致。我以为我用 CMDeviceMotion.attitude.pitch 设置得很好,直到我发现将 iPhone 侧向倾斜会与那个数字混淆。因此,我从 pARk* 示例中获取了一些代码,现在我正在尝试隔离围绕垂直通道的旋转。我正在绘制的场景并不关心用户面向哪个方向,这些人物总是会被绘制到离观察者一定距离的地方。我认为当我计算出垂直轴旋转分量时,我可以将其反转并将其从旋转矩阵中相乘,因此当用户改变方向时保持 OpenGL 图形静止。

这是我的代码:

然后我像往常一样在 OpenGL 中使用 rotMatrix。

想法、建议?提前致谢。

*pARk 示例代码在真实空间中设置了几个点,计算出用户的位置和这些点的相对方向,并将它们绘制在屏幕上,使它们看起来漂浮在指向其位置的地平​​线上。

0 投票
1 回答
2345 浏览

ios - GLKit 中的深度测试

我是 OpenGL/GLKit 的新手,并且在深度测试方面遇到了麻烦。下图显示了一个有五个横梁相交的柱子。它们都在中间(柱子内部)相遇,但正如您所见,应该被遮挡的光束部分仍然可见。它们像疯了一样闪烁,当我改变视图以使光束在屏幕上重叠时也会发生同样的事情。如果我不 glEnable(GL_CULL_FACE) 那么它会发生在每个形状内,即后多边形的背面被绘制并干扰前多边形的正面。

在此处输入图像描述

以下是我认为相关的代码片段,我省略了有关设置顶点和视角的内容。希望有人会认识到这个问题,并且那里有灵丹妙药。

在我的视图控制器中

在 Beam.m 中

我完全承认自己在这方面非常陌生且缺乏经验,因此如果我的应用程序结构不佳,我很愿意接受建设性的批评。

干杯,克雷格

0 投票
1 回答
2755 浏览

ios - 在 GLKit/OpenGL-ES 中自动计算法线

我正在根据 Apple 的示例代码在 OpenGL-ES 中制作一些相当基本的形状。他们使用了一个点数组,在第一个数组中有一个索引数组,每组三个索引创建一个多边形。太好了,我可以做出我想要的形状。为了正确着色形状,我相信我需要计算每个多边形上每个顶点的法线。起初形状是长方体的,所以很容易,但现在我正在制作(稍微)更高级的形状,我想自动创建这些法线。如果我得到一个多边形的两条边的向量(这里所有的多边形都是三角形)并将它们的叉积用于该多边形上的每个顶点,这似乎很容易。之后,我使用下面的代码来绘制形状。

我无法理解的是为什么我必须手动执行此操作。我敢肯定在某些情况下,您需要的不仅仅是垂直于表面的矢量,但我也确信这是迄今为止最流行的用例,所以不应该有更简单的方法吗?我错过了什么明显的东西吗?glCalculateNormals() 会很棒。

//这是一个答案 传入一个您希望用法线填充的 GLKVector3[],另一个带有顶点(每三个被分组为多边形),然后是顶点数。

0 投票
1 回答
454 浏览

iphone - 如何在 iOS 中使用 GLKit 渲染具有透明度的 3D 形状

我有一些由一组顶点/法线/索引定义的 3D 形状。我希望以半透明的方式渲染一些对象。有些物体有纹理,有些则没有。

我正在使用 GLKit 在 iOS 上进行开发。请告诉我怎样才能达到效果?

0 投票
1 回答
502 浏览

iphone - OpenGL 发送顶点指针或生成缓冲区

我刚刚使用 GLKit 为 iPhone 启动了 OpenGL。我的编程背景几乎只是 Java 和 Objective C,十多年前几乎没有 C、C++ 经验。剩下的只是我如何与指针斗争的遥远记忆——我认为我失败了。

现在似乎一切都回到了我身边......

我参加了Ian Terrel 的一些非常棒的教程系列的迭代,这真的帮助了我(谢谢!!!)。

这个问题是关于代码的以下部分(主要直接取自教程):

所有这些工作都很好,但后来我在 Apple 的OpenGl 指南中偶然发现了以下内容:

[...],但效率低下。每次调用 DrawModel 时,索引和顶点数据都会复制到 OpenGL ES,然后传输到图形硬件。[...] 会影响性能。[...]您的应用程序应将其顶点数据存储在顶点缓冲区对象 (VBO) 中。[...]

那里建议的代码示例(其他来源显示几乎相同)如下所示:

后来用:

我有几个问题:

  • 上述性能影响有多大?有必要改代码吗?
  • 在上面的第一个代码示例(Ian 的/我的代码)中……到底发生了什么
    • 如果顶点是只读的,为什么可以设置顶点[i],以及在哪里以及如何为顶点分配内存?
  • 我可以在哪里将上面的代码(缓冲区创建和绑定的东西)放在 Ian/我的方法中,为什么绑定和绘图之间没有连接(变量是方法调用或其他东西)?
0 投票
4 回答
10359 浏览

ios - OpenGL ES 2.0 渲染到纹理

我正在尝试使用 OpenGL ES 2.0 渲染到纹理,但我似乎无法使其工作。

这就是我进行的方式:

但是当我尝试在它上面绘图并使用生成的纹理时,纹理被绘制为全黑。

如果我只是不将绘图代码包装在render_tex->begin();and中render_tex->end();,那么一切都会正确绘制,这让我相信问题与上面的代码无关。

0 投票
1 回答
1470 浏览

xcode4.2 - 为什么我的 OpenGL ES 2.0 程序只画一条线而不是一组线?(GLKit 或 OpenGL)

好的,我一遍又一遍地检查,到目前为止,我“认为”我了解 opengl 是如何绘制的以及如何指定我想要绘制的内容,但是我似乎无法让它绘制超过 1 条线。

使用 Xcode 4.2 中的模板,我可以获得以下代码。它确实使用 GLKIT 绘制了我的方形骨架,因为我只是忽略了 opengl es 2.0 方法不使用着色器 atm,但是当我触摸屏幕时它应该绘制我自己的数组,它没有......

所以首先是方形格式(只是为了显示他们在模板中使用的变量类型)

这是我在“View did Load”函数中调用一次的 SetupGL。

这是更新方法(只是让东西旋转)

Draw In Rect 方法(我认为的渲染)

这是触摸部分:

在开始接触时,我只是在创建 NSMutableData

在 Touches Ended 时,我正在尝试使用我得到的新顶点进行绘制。顶点是使用触发运动管理器读数的计时器获得的,在用户触摸屏幕的位置进行一些数学运算,因此值应该在屏幕坐标的范围内。

但是为了测试绘图,我只是创建了一个临时 NSMUtableData 变量,其中包含一些我手动添加的值(添加太可怕了)。我正在使用 NSMutableData,因为这就是他们在另一个教程中的建议。我 90% 确定它正确保存了数据,因为当我检索它时它就在那里。(http://games.ianterrell.com/how-to-draw-2d-shapes-with-glkit/

最后一部分是让我发疯的部分!我认为它应该做的是,用我自己的数组修改缓冲区,以便自动更新绘制它。

任何建议将不胜感激。

谢谢

哦,如果有人知道如何设置正交矩阵,因为我真的只对二维组件 atm 感兴趣,所以我不能用透视矩阵替换它。

编辑:

好的,我只是尝试发送一个随机的 GLfloat 数组,它确实改变了形状,但为什么不使用我的 NSMutableData 数组呢?我以为我正在做与教程中完全相同的程序....