问题标签 [opengl-es]
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.
objective-c - 将 iPhone openGLES 应用程序移植到 OSX?
为 iPhone 开发是我对 Objective-c 的第一次体验,也是对 xcode 的第一次深入体验。使用 openGL 将 openGLES iPhone 应用程序移植到 OSX 桌面会有多困难?我不是在问用户界面——显然桌面上没有可可触摸 UI。我专门询问应用程序委托和 openGLES 层。有什么重大障碍吗?是否像在 cocoa 类型的项目中简单地创建一个新的应用程序委托一样简单?
iphone - 了解 iPhone 上的内存消耗
我正在使用 OpenGL ES 开发一个 2D iPhone 游戏,我一直在达到 24 MB 内存限制——我的应用程序不断崩溃并显示错误代码 101。我非常努力地寻找内存的去向,但 Instruments 中的数字仍然很多比我预期的要大。
我使用 Memory Monitor、Object Alloc、Leaks 和 OpenGL ES 工具运行应用程序。当应用程序被加载时,可用物理内存从 37 MB 下降到 23 MB,Object Alloc 稳定在 7 MB 左右,Leaks 显示两个或三个泄漏大小为几个字节,Gart 对象大小约为 5 MB,Memory Monitor 说应用程序占用大约 14 MB 的实际内存。我很困惑内存去了哪里——当我深入研究对象分配时,大部分内存都在纹理中,正如我所期望的那样。但是我自己的纹理分配计数器和 Gart 对象大小都同意纹理应该占用大约 5 MB。
我不知道分配任何其他值得一提的东西,并且 Object Alloc 同意。记忆去哪儿了?(如果这还不够,我很乐意提供更多细节。)
更新:我真的试图找到我可以分配这么多内存的地方,但没有结果。让我疯狂的是对象分配(~7 MB)和内存监视器(~14 MB)显示的实际内存使用量之间的差异。即使我忘记了巨大的泄漏或大块内存,它们仍然应该出现在 Object Allocations中,不是吗?
我已经尝试过通常的 嫌疑人,即。与UIImage
它的缓存,但这并没有帮助。有没有办法逐行跟踪内存使用“调试器风格”,观察每条语句对内存使用的影响?
到目前为止我发现了什么:
我真的在使用那么多内存。衡量真正的内存消耗并不容易,但是经过大量计算后,我认为内存消耗确实很高。我的错。
我发现没有简单的方法来测量使用的内存。内存监视器的数字是准确的(这些是真正重要的数字),但内存监视器无法告诉您内存的确切位置。Object Alloc 工具对于跟踪实际内存使用情况几乎毫无用处。当我创建纹理时,分配的内存计数器会上升一段时间(将纹理读入内存),然后下降(将纹理数据传递给 OpenGL,释放)。这没关系,但并不总是会发生——有时即使在纹理被传递到 OpenGL 并从“我的”内存中释放之后,内存使用率仍然很高。这意味着 Object Alloc 工具显示的分配内存总量小于实际总内存消耗,但大于实际消耗减去纹理 (
real – textures < object alloc < real
)。去搞清楚。我误读了编程指南。24 MB 的内存限制适用于纹理和表面,而不是整个应用程序。实际的红线稍远一些,但我找不到任何硬数字。共识是 25-30 MB 是上限。
当系统内存不足时,它开始发送内存警告。我几乎没有什么可释放的,但其他应用程序确实会将一些内存释放回系统,尤其是 Safari(它似乎正在缓存网站)。当内存监视器中显示的可用内存变为零时,系统开始查杀。
我不得不硬着头皮重写代码的某些部分以提高内存效率,但我可能仍在推动它。如果我要设计另一个游戏,我肯定会想到一些资源分页。对于当前的游戏,这非常困难,因为它一直在运动,并且加载纹理会妨碍,即使在另一个线程中完成。我会对其他人如何解决这个问题很感兴趣。
请注意,这些只是我的观点,不必太准确。如果我发现有关此主题的更多信息,我将更新该问题。我会保持这个问题的开放性,以防了解这个问题的人愿意回答,因为这些都是比其他任何东西更多的解决方法和猜测。
iphone - 在 iPhone 应用程序中直接在屏幕上绘制单个像素的最快方法是什么?
我正在寻找一种最快的方法,可以在性能非常好的 iPhone 应用程序中将数千个单独计算的像素直接绘制到屏幕上。
iphone - OpenGL ES 可滚动列表框裁剪问题
我正在尝试在 OpenGl ES(用于 iPhone/iTouch)中创建一个通用列表框,并且在裁剪 ListBoxItems 时遇到了一些难题。每个 ListBoxItem 对象都知道如何绘制自己。我正在制作的 ListBox 只会一个接一个地绘制。但是如果项目的数量大于 ListBox 怎么办?我需要能够上下滚动(不是问题)ListBoxItems。这将是一个平滑滚动,因此有时 ListBoxItem 将有一半(或更多或更少)可见,而另一部分将被隐藏,因为它位于 ListBox 区域“外部”。当我制作我的 ListBox 小部件时,如何让这个剪辑正常工作?
感谢您提供的任何帮助或链接,
〜埃里克
iphone - 想要在 iPhone 上显示 3D 模型:如何开始?
我想在 iPhone 上显示和旋转单个 3D 模型,最好是纹理模型。不必放大和缩小,或有背景,或任何东西。
我有以下内容:
- 一部 iPhone
- 一台MacBook
- iPhone SDK
- 搅拌机
我的知识库:
- 我可以在各种 3D 程序中制作 3D 模型(我最喜欢 3D Studio Max,我曾经上过一门课程,但我用过其他的)
- 多年前程序编程的一般知识(QuickBasic - 我老了!)
- 初学者通过简单的 Java 和 C# 教程了解面向对象编程的知识(Head Start C# 书和我妻子的使用 Java 的 OOP 课程介绍)
- 我已经设法显示了一个 3D 纹理模型并使用 C# 中的教程旋转它我从网上下了(我不只是复制和粘贴,我基本上了解它是如何工作的)和 XNA 游戏开发库,使用 Visual Studio视窗。
我不知道的是:
- 关于 Objective C
- iPhone 显然使用的关于 OpenGL 或 OpenGL ES 的任何信息
- 关于 XCode 的一切
我的主要问题是我不知道从哪里开始!我发现的所有 iPhone 书籍似乎都是关于创建 GUI 应用程序,而不是 OpenGL 应用程序。我找到了一本 OpenGL 书,但我不知道有多少(如果有的话)适用于 iPhone 开发。而且我发现 Objective C 的语法有些混乱,有奇怪的嵌套方法命名、没有意义的“id”之类的东西,以及我必须进行手动内存管理的可怕想法。
最好的起点在哪里?我找不到任何此类事情的教程,但也许我的 Google-Fu 很弱。或者我应该从学习Objective C开始?我知道像 Aaron Hillgrass 之类的书,但我也读到它们已经过时,并且大部分示例代码在 iPhone SDK 上不起作用,而且它似乎面向模型-视图-控制器范式,而后者并不适用似乎适合 3D 应用程序。
基本上我对我的第一步应该是什么感到困惑。
cocoa-touch - 开发一个基于 NavigationBar 的应用程序,包括一个 Open GL 视图:如何?
我的问题从一个问题开始:
我在 Xcode 中开始了一个项目:一个基于导航栏的项目(带有一个 TableView)。然后我通过 IB 或以编程方式添加了一些视图……效果很好。
然后,我决定编写自己的 ViewClass,继承自 UIView,称为 OpenGlView(基于 XCode 中 Basic OpenGlES 项目提供的视图)及其OpenGlViewController
(继承自UIViewController
)。
这工作正常,直到我尝试将视图控制器推入我的导航栏:然后我收到一个"EXC__ BAD __ACCESS"。我不明白为什么除了用于显示 OpenGL 内容的视图之外,任何视图都可以...
而且我实际上不知道如何设法开发基于 NavBar 的应用程序,包括显示 OpenGL 内容的视图……知道吗?
(我还尝试将之前添加到 NavigationBarOpenGlView
的基本的子视图添加为子视图,但我收到了同样的错误)。UIView
在 RootController 中:
在 OpenGLViewController 中:
iphone - OpenGL ES/iPhone 的性能和背景图像
我正在使用 OpenGL ES 为 iPhone 开发 2D 游戏,我想使用 320x480 位图图像作为持久背景。
我的第一个想法是创建一个 320x480 的四边形,然后在其上映射一个代表背景的纹理。所以...我创建了一个 512x512 的纹理,上面有一个 320x480 的图像。然后我将其映射到 320x480 四边形。
我每帧都绘制这个背景,然后在它上面绘制动画精灵。除了所有这些对象(背景+精灵)的绘制太慢之外,这很好用。
我做了一些测试,发现我的减速是在像素管道中。毫不奇怪,大背景图片是罪魁祸首。为了证明这一点,我删除了背景绘制,其他一切都渲染得非常快。
我正在寻找有关如何保持我的背景并提高绩效的建议。
这里有更多信息:
1)我目前正在模拟器上进行测试(仍在等待 Apple 获得许可)
2)背景是压缩到128k的PVR纹理
3)我曾希望有一种方法可以将此背景缓存到颜色缓冲区中,但没有任何运气。这可能是由于我对 OpenGL ES 缺乏经验,或者这可能是一个愚蠢的想法,行不通:)
4)我意识到整个背景并不总是需要刷新,只是被移动精灵绘制的部分。我开始研究刷新(根据需要)背景部分的技术,无论是作为单独的纹理还是使用剪刀框,但这似乎不够优雅。
任何提示/建议将不胜感激......
谢谢你。
iphone - OpenGL ES 中带有 8 位 Alpha 通道的调色板纹理
我可以在 OpenGL ES 中获得带有 RGB 调色板和 8 位 alpha 通道的调色板纹理吗?(我的目标是 iPhone OpenGL ES 实现。)在查看 OpenGL 文档后,在我看来,调色板中支持带有 alpha 的调色板纹理,即。纹理包含 8 位索引到具有 256 种 RGBA 颜色的调色板中。我想要一个包含 8 位索引到 RGB 调色板和独立的 8 位 alpha 通道的纹理。(我试图节省内存,32 位 RGBA 纹理是相当奢侈的。)或者这应该是手工完成的,即。通过创建两个独立的纹理,一个用于颜色,一个用于 alpha 贴图,然后手动组合它们?
iphone - 为什么这个 OpenGL ES 代码在 iPhone 上运行缓慢?
我在学习 OpenGL ES 时稍微修改了 iPhone SDK 的 GLSprite 示例,结果发现速度很慢。即使在模拟器中(硬件最差)所以我一定做错了,因为它只有 400 个带纹理的三角形。
每次触摸屏幕或移动屏幕上的手指时都会调用 drawView,并将 tx,ty 设置为发生触摸的 x,y 坐标。
我也尝试过使用 GLBuffer,当翻译是预先生成的并且只有一个 DrawArray 但提供了相同的性能(~4 FPS)。
===编辑===
同时我已经修改了这个,以便使用更小的四边形(尺寸:34x20)并且更少的重叠。大约 400 个四边形 -> 800 个三角形分布在整个屏幕上。纹理大小为 512x512 atlas 和 RGBA_8888,而纹理坐标为浮点数。该代码在 API 效率方面非常难看:有两个 MatrixMode 更改以及两个加载和两个平移,然后是三角形带(四边形)的绘制数组。现在这会产生 ~45 FPS。
iphone - 图像上的 Quartz 2D/OpenGLES 几何失真(最好使用 CGImage)
实现捏/鱼眼/等几何扭曲的首选方法是什么?使用 iPhone SDK?我知道 OSX 的核心图像库内置了所有这些类型的过滤器,但不适用于 iPhone SDK。
给定原始源位图数据,我可以在特定位置和半径处创建置换贴图,但我不确定如何将此位图数据应用为我的 CGImage 上的转换。
这不是仿射变换,因为线在失真/等区域周围不再平行。
是否可以使用 CGImage 或者我需要使用 OpenGLES 来做到这一点?
谢谢