0

GLUTで立方体を描くシンプルなアプリを作っています。
プレーンCでOpenGLを研究したので、コンテキストを初期化するためにどの関数を呼び出す必要があるかを理解するのは困難です。これは、glutInitなどの関数を呼び出す必要がなくなったためです。
そこで、NSOpenGLViewをサブクラス化し、ウィンドウのワンショットメモリを無効にして、次のコードを記述しました。

@implementation MyView

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        NSOpenGLContext* context=[self openGLContext];
        [context makeCurrentContext];
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(0, 0, -100, 0, 0, 0, 0, 1, 0);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(45, 1, 1, 1000);
        glShadeModel(GL_SMOOTH);
        glMatrixMode(GL_MODELVIEW);
        glEnable(GL_DEPTH_TEST);
    }
    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor4f(1, 0, 0, 0);
    glutSolidCube(10);

    glFlush();
}

しかし、立方体ではなく黒いビューが表示されているため、何かが足りないようです。

4

1 に答える 1

2

initWithFrameのコードをprepareGLに移動する必要があります。例えば

- (void)prepareOpenGL {
    NSOpenGLContext *context = [self openGLContext];
    [context makeCurrentContext];
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0, 0, -100, 0, 0, 0, 0, 1, 0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45, 1, 1, 1000);
    glShadeModel(GL_SMOOTH);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_DEPTH_TEST);
} 
于 2012-12-03T00:38:58.440 に答える