4

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

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

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


(来源:canardpc.com

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

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

谢谢你。

4

2 回答 2

6

好的,所以我找到了答案。

图中的“OpenGL View Controller”必须是普通的UIViewController。子类化此视图控制器并在 viewDidLoad 中,以编程方式创建您的 OpenGL 视图控制器:

- (void)viewDidLoad
{
    [super viewDidLoad];

    _openGLViewController = [[FZIOpenGLViewController alloc] initWithNibName:@"FZIOpenGLView" bundle:nil];

    _openGLViewController.view.frame = _openGLView.frame;

    [self.view addSubview:_openGLViewController.view];

}

在这段代码中,_openGLView 是一个 IBOutlet,代表图片中的“GLKit View”。它基本上只是为了获得正确的尺寸。

_openGLViewController 是处理所有 OpenGL 的 GLKViewController 子类。.xib 文件 FZIOpenGLView.xib 只是具有适当文件所有者 (FZIOpenGLViewController) 的 GLKView。

有用:

结果
(来源:canardpc.com

于 2011-12-07T14:30:42.847 回答
0

您可以使用主视图尺寸,而不是未使用的 openGLView(仅占用内存):

_openGLViewController.view.frame = self.view.frame; // instead of _openGLView.frame
于 2012-05-16T07:55:20.467 回答