1

Mac 上の OpenGL に問題があります。問題は深度テストにあると思います。

だから、私の問題について: 説明するのではなく、2 つのスクリーンショットを作成 ました。 .rackspacecloud.com/dd2267e27a561b5f02344dca57508dddce21d2315f.jpg

緑の床を描かないと、すべてが(ちょっと)うまく見えます。しかし、それでも、このように見えるのは恐ろしいことです。

Opengl のセットアップに使用する 3 つのコードブロックを次に示します。

+ (NSOpenGLPixelFormat*) defaultPixelFormat
{
    NSOpenGLPixelFormatAttribute attributes [] = {
        NSOpenGLPFAWindow,
        NSOpenGLPFADoubleBuffer, 
        NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)16, 
        (NSOpenGLPixelFormatAttribute)nil
    };
    return [[[NSOpenGLPixelFormat alloc] initWithAttributes:attributes] autorelease];
}


- (void) prepareOpenGL
{
    NSLog(@"Preparing OpenGL");
    glClearColor( 0.0f, 0.0f, 1.0f, 1.0f );             

    glEnable(GL_TEXTURE_2D);                           

    glClearDepth(1);                                  
    glEnable(GL_DEPTH_TEST);                          

    glEnable (GL_BLEND);                              
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

- (void)reshape
{
    NSLog(@"Reshaping view");
    glViewport( 0, 0, (GLsizei)[self bounds].size.width, (GLsizei)[self bounds].size.height);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective( 45.0, [self bounds].size.width / [self bounds].size.height, 0.1f /*Nearest render distance*/, 5000.0 /*Render distance*/);
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
} 
4

1 に答える 1

4
gluPerspective( 45.0, [self bounds].size.width / [self bounds].size.height, 0.1f /*Nearest render distance*/, 5000.0 /*Render distance*/);

これはニア クリップ プレーンとしては小さすぎます近くのクリップの値が 0 に近づくほど、遠くにある値の精度が低下します。近くのクリップを少なくとも 1.0 に戻します。一般に、耐えられる限り遠ざける必要があります。

ああ、16 ビットではなく 24 ビットの深度バッファを使用する必要があります。

于 2011-07-08T20:53:08.963 に答える