2011-11-23 78 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