当中心在屏幕外时,GL_POINT不会渲染

时间:2012-08-12 04:43:50

标签: iphone opengl-es point

我正在制作一款涉及使用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平移后),不会绘制整点。即使中心不在屏幕上,如何使点仍然呈现?

1 个答案:

答案 0 :(得分:1)

我不相信你能做些什么来轻松修复。在光栅化之前剪切原始图像,因此如果该点位于视锥体之外,则它不会被栅格化,即使光栅化会创建位于视锥体内的碎片。

使用GL_TRIANGLES / GL_QUADS切换到实际四边形,或者如果您真的不想这样做,可以将点渲染到尺寸略大于视口的屏幕外缓冲区,然后将该图像的中心点亮回到主框架上。