OpenGL绘制矩形轮廓

Kim*_*imi 7 opengl-es

我想绘制一个有4行(左边)的矩形.但无论我如何绘制(条纹,环形,普通线条),结果都是右侧的 - 它在角落处缺少像素.

|||||||||||     ||||||||||
|         |    |          |
|         |    |          |
|||||||||||     ||||||||||
Run Code Online (Sandbox Code Playgroud)

有没有办法得到左手边的结果?

编辑

无法发布代码,因为它很大程度上取决于底层框架,但所有绘制调用只不过是glDrawElements,索引缓冲区指向4个顶点,没有alpha测试.

在摆弄坐标后,建议到达这个有趣的结果(iOS模拟器):

样品

请注意,只有左上角缺少某些矩形的像素...所有矩形都是在单个绘图元素调用中以GL_LINES模式绘制的.没有其他的东西被绘制.

编辑2

OpenGL常见问题14.100表示

OpenGL不提供一种机制来干净地连接共享公共顶点的线,也不提供干净地限制端点的线.

gen*_*ult 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;
}
Run Code Online (Sandbox Code Playgroud)