我正在尝试绘制一个有4行(左边)的矩形。但无论我如何绘制(条纹,环形,普通线条),结果都是右侧的 - 它在角落处缺少像素。
||||||||||| ||||||||||
| | | |
| | | |
||||||||||| ||||||||||
有没有办法获得左手边的结果?
修改
无法发布代码,因为它很大程度上取决于底层框架,但所有绘制调用只不过是glDrawElements,索引缓冲区指向4个顶点,没有alpha测试。
按照建议的方式摆弄坐标到达这个有趣的结果(iOS模拟器):
请注意,只有左上角缺少某些矩形的像素... 在单个绘制元素调用中,所有矩形都以GL_LINES模式绘制。没有其他的东西被吸引。
编辑2
OpenGL FAQ问题14.100说明
OpenGL没有提供一种机制来干净地连接共享公共顶点的线,也不提供干净地限制端点。
答案 0 :(得分:12)
稍微移动坐标框,使线条落在像素中心上:
#include <GL/glut.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
double w = glutGet( GLUT_WINDOW_WIDTH );
double h = glutGet( GLUT_WINDOW_HEIGHT );
glOrtho( 0, w, 0, h, -1, 1);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
// important
glTranslatef( 0.5, 0.5, 0 );
float offset = 40;
glColor3ub( 255, 0, 0 );
glBegin(GL_LINE_LOOP);
glVertex2f( 0+offset, 0+offset );
glVertex2f( 0+offset, h-offset );
glVertex2f( w-offset, h-offset );
glVertex2f( w-offset, 0+offset );
glEnd();
glutSwapBuffers();
}
int main( int argc, char **argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowSize( 320,240 );
glutCreateWindow( "Rect" );
glutDisplayFunc( display );
glutMainLoop();
return 0;
}