objective-c - OpenGL ES/iPhone 开发问题-第一场比赛

标签 objective-c ios opengl-es

我目前正在使用 openGLES 开发我的第一款 iPhone 游戏 - 太棒了!爱它的每一分钟。但是我有几个问题:

  1. 我想制作一个粒子系统 - 最快的方法是什么?我想我可以制作一个可变的粒子对象数组,但是每个粒子都必须从 NSObject 派生,对吗?这似乎带来了相当多的开销。有更好的方法吗?过去,在 C++ 中,我使用了一个非常简单的粒子对象向量,并将死粒子交换到最后,并在我需要新粒子时重用它们——我可能会在这里做同样的事情。只是担心(也许不公正地)效率。

  2. 如何更改 OpenGL 的坐标系以允许我使用 0-screensize 作为单位而不是默认的 -1 到 1? (例如,使用点 {-1,0,0, 1,0,0, 0,1,0} 的简单顶点列表将构成一个三角形,其中斜边沿整个中心水平轴延伸)

  3. 看起来好像我根本不能在 1.1 中使用着色器,但是 2.0 将它们用于一切我有什么理由坚持使用 1.1 吗?

  4. 是否有充分的理由完全在 OpenGL 中创建我的 GUI?或者我会很好地使用标准系统吗? (比如创建带有 GUI 元素的 xib 文件)

  5. 由于我刚刚开始,OpenGL ES 是否有任何常见的陷阱?我真的不打算把它变成开放式的,我正试图根除任何让规范的许多新用户绊倒的具体内容。

最佳答案

  1. 我使用常规的 C 结构,在这种情况下 NSObjects 是 pig ,在 3G 上我可以获得 2000 个粒子,C 结构没有问题,少于 200 个对象。
  2. 像这样的东西会给你一个 480x320 坐标系:

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    CGRect rect = self.view.bounds;
    if (highRes && (retina == 1)) {
        glOrthof(0.0, rect.size.width/2, 0.0 ,  rect.size.height/2, -1, 1000.0);
    } else {
        glOrthof(0.0, rect.size.width, 0.0 ,  rect.size.height, -1, 1000.0);    
    }
    
  3. 仅支持旧设备 <3GS。
  4. 取决于您想要的外观和工作。如果您需要文本输入,请记住您必须在 openGL 中从头开始,还有字体渲染等。有时您可以将两者混合使用(比如打开带有文本框的抽屉等),但是当混合使用 opengl 时必须非常简单。
  5. 有很多陷阱,最好有一个好的教程,这样您就可以掌握基础知识,从设置 View 到获得模型纹理,之后如果出现问题您可以引用它。

祝你好运,让它成为一个有趣的游戏:-)

关于objective-c - OpenGL ES/iPhone 开发问题-第一场比赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963804/

相关文章:

ios - 如何避免崩溃 "OpenGL rendering while app in background state"

ios - 使用 Storyboard 的条件转场

iPhone dev - 使用 NSDate 对象创建每周、每月或每年的通知?

ios - FFmpeg 找不到 yuv420p 流的编解码器参数

android - 对正在播放的视频应用效果

java - 适用于 Android 的 OpenGL ES 需要 2.0 命令才能用于 3.0 上下文吗?

ios - 如何使用 messageID 获取邮件的文件夹详细信息?

iphone - 检测 iPhone 中断类型

android - IOS - 从 Parse.com 后端下载图像

ios - Swift: Long Press Gesture Recognizer - 检测点击和长按