嵌套的GLKView和GLKViewController

4

我刚接触OpenGL ES,正在尝试GLKit。我的目标是开发一个非常简单的应用程序,只是为了更好地了解OpenGL。

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

现在这部分完成后,我想尝试不同的投影矩阵,并开始设计用户界面以达到这个目的:


(来源: canardpc.com)

唯一的问题是,当GLKViewController的顶层视图不是GLKView时,它无法正常工作。

是否有可能将GLKView作为子视图,并仍然保留GLKViewController的很酷的功能?

谢谢。

2个回答

6

好的,我找到了答案。

图片中的“OpenGL视图控制器”必须是普通的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 则是你的 GLKViewController 子类,处理OpenGL的一切。.xib文件 FZIOpenGLView.xib 只是一个带有相应的文件所有者(FZIOpenGLViewController)的 GLKView。
它可以正常工作: result
(来源:canardpc.com

你从GLKView中找到轨迹球和比例尺的坐标是在哪里?我正在尝试实现类似的功能 - 每当用户触摸屏幕并与3D模型交互时,轨迹球应该显示。 - kschins

0

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

_openGLViewController.view.frame = self.view.frame; // instead of _openGLView.frame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接