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 切换到真正的四边形,或者如果你真的不想这样做,你可以将你的点渲染到一个尺寸略大于视口的屏幕外缓冲区,然后将该图像的中心 blit 回到主框架。

于 2012-08-12T14:46:46.567 回答