9

私はOpenGLESを学んでおり、UIViewController内にGLKViewerを配置しようとしています。

GLViewControllerを使用することで主要な問題を回避できることはわかっていますが、この方法でそれを行う方法を学ぼうとしています。

この質問を見つけました。GLKViewをUIViewControllerネストし、GLKViewとGLKViewControllerをネストしましたが、プロジェクトを実行すると、drawInRect印刷行に到達しないため、すべての正しい手順を実行していると思いますが、何かが欠落している必要があります。

ストーリーボードでは、ViewControllerをglkviewコンポーネントのデリゲートとして指定しています。

私はコードをできるだけ単純に保つように努めました、そしてどんな助けでも感謝されるでしょう:

MyController.h

#import <Foundation/Foundation.h>
#import <GLKit/GLKit.h>

@interface MyGLController : UIViewController <GLKViewDelegate>
{
    GLuint vertexBufferID;

}

@property (weak, nonatomic) IBOutlet GLKView *glview;

@property (strong, nonatomic) GLKBaseEffect *baseEffect;

@end

MyGLController.m

#import "MyGLController.h"

@implementation MyGLController

//@synthesize baseEffect;

-(void) viewDidLoad{
    [super viewDidLoad];

    self.glview.context = [[EAGLContext alloc] initWithAPI:
     kEAGLRenderingAPIOpenGLES2];

     [EAGLContext setCurrentContext:self.glview.context];
    printf("View Loaded");
}


- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    printf("DrawInRect");
}

@end

* アップデート *

私が知る限り、glkviewは、提案されているように適切に接続され、josh-knappが追加され、setNeedsDisplayと呼ばれています。

足りないものがある場合に備えて、プロジェクトのコピーをここにアップロードしました:https ://github.com/jcrogel/OpenGLDebug.git

私はこれで完全な初心者なので、愚かな見落としをお詫びします:)

4

3 に答える 3

11

ストーリーボードでMyGLControllerのglviewプロパティを接続したとは言わなかったので、それを確認します。

次に、ロード後にglviewコンテキストを設定します。GLKViewControllerがないと、描画する必要があることをglviewに伝えることはできません。[self.glview setNeedsDisplay]コンテキストが設定された後、 必ずどこかに電話してください。

于 2012-11-12T16:56:48.140 に答える
7

私も同様の問題を抱えていました。

デフォルトでは、xcodeはenable setNeedsDisplayチェックボックスをNOプロパティGLKViewリストに設定します。
私がそれを変更すると、それは機能しました。

于 2014-01-09T09:32:43.917 に答える
1

この質問はすでに回答されているようです。しかし、私は同じ問題を抱えていましたが、別の解決策がありました。他の人がそれから利益を得ることができるかもしれないという偶然の機会に私がここに情報を投稿すると思いました。

問題の説明

GLKViewとGLKViewControllerを使用している間、レンダーループ関数(drawInRect)は一度呼び出されますが、再度呼び出されることはありません。

考えられる原因

CViewControllerの一部のメソッドは、スーパーを呼び出さずに正しく実装されていません。次のコードは、そのような3つの関数を示しています。以下の例では、3つの関数が正しく実装されており、それらのスーパーを呼び出しています。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:NO];
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:NO];
}
-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:NO];
}
于 2013-01-07T07:10:51.243 に答える