0

GL_POINTを使用してポイントをレンダリングするiPhoneゲームを作成しています。ただし、ポイントの中心が画面外にある場合でも、ポイントの画面上にある部分を描画したいと思います。これが、ポイントをレンダリングするために使用しているコードです。

-(void)render {
    if (!fill || !outline || !active || dead) 
        return;

    NSLog(@"rendering");

    glPushMatrix();
    glLoadIdentity();
    glMultMatrixf(matrix);

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

    glPointSize(scale.x*2);

    [outline render];

    glPointSize(2*(scale.x-kLineWidth));

    [fill render];

    glPopMatrix();
}

"rendering"レンダリングする必要があるときにログに記録されるため、このメソッドは適切に呼び出されることに注意してください。

およびメソッドは次のように[outline render]なります[fill render]

-(void)render {
    // load arrays into the engine
    glVertexPointer(vertexSize, GL_FLOAT, 0, vertexes);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColorPointer(colorSize, GL_FLOAT, 0, colors); 
    glEnableClientState(GL_COLOR_ARRAY);

    //render
    glDrawArrays(renderStyle, 0, vertexCount);

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
}

このコードを使用して「パン」効果を使用しています

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-kScreenWidth/2.0 + xPan, kScreenWidth/2.0 + xPan, -kScreenHeight/2.0 + yPan, kScreenHeight/2.0 + yPan, -1.0f, 1.0f);

glMatrixMode(GL_MODELVIEW);

ただし、ポイントの中心が画面上にない場合(でパンした後glOrthof)、ポイント全体が描画されません。中心が画面上にない場合でも、ポイントをレンダリングするにはどうすればよいですか?

4

1 に答える 1

1

簡単な修正のためにできることは何もないと思います。プリミティブはラスター化の前にクリップされるため、そのポイントがビュー錐台の外側にある場合、ラスター化によってビュー錐台の内側にあるフラグメントが作成されたとしても、ラスター化されません。

GL_TRIANGLES / GL_QUADSを使用して実際のクワッドに切り替えるか、本当にそれを望まない場合は、ビューポートよりもわずかに大きいサイズのオフスクリーンバッファーにポイントをレンダリングしてから、その画像の中央をブリットしてメインフレーム。

于 2012-08-12T14:46:46.567 に答える