2011-11-23 82 views
4

我是OpenGL ES的新手,我正在尝试使用GLKit。我的目标是开发一个非常简单的应用程序,以获得良好的OpenGL感受。我开始使用Apple的示例代码(OpenGL ES游戏),并且实现了基本的手势控制:平移,缩放,旋转(轨迹球算法)。嵌套的GLKView和GLKViewController

现在做到这一点,我想用不同的投影矩阵玩,我开始设计的用户界面能够做到这一点:

http://tof.canardpc.com/view/7e0fc0da-9c63-489c-a1f1-eb6475dd3809.jpg

唯一的问题是,它不在GLKViewController中的顶视图不是GLKView时工作。

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

谢谢。

回答

5

好吧,我找到了答案。

图片中的“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是代表“GLKit视图”中的图片一个IBOutlet。它基本上就是在那里获得正确的尺寸。

_openGLViewController是你的GLKViewController的子类,它处理所有的OpenGL。 .xib文件FZIOpenGLView.xib只是一个具有相应文件所有者(FZIOpenGLViewController)的GLKView。

它的工作原理:

result http://tof.canardpc.com/view/e06a0d8b-0d58-4cc9-965c-00e6ddefd519.jpg

+0

你在哪里找到轨迹球的坐标并在你的GLKView中缩放?我试图实现类似的东西 - 每当使用手指触摸屏幕并与轨迹球应显示的3D模型进行交互时。 – kschins

0

相反,未使用(只是占用的内存),你 可以使用主视图尺寸openGLView的:

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