我正在制作一款涉及使用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
平移后),不会绘制整点。即使中心不在屏幕上,如何使点仍然呈现?
答案 0 :(得分:1)
我不相信你能做些什么来轻松修复。在光栅化之前剪切原始图像,因此如果该点位于视锥体之外,则它不会被栅格化,即使光栅化会创建位于视锥体内的碎片。
使用GL_TRIANGLES / GL_QUADS切换到实际四边形,或者如果您真的不想这样做,可以将点渲染到尺寸略大于视口的屏幕外缓冲区,然后将该图像的中心点亮回到主框架上。