OpenGL draw rectangle outline [closed]

梦想的初衷 提交于 2019-12-07 01:23:13

问题


I am trying to draw a rectangle with 4 lines (left one). But no matter how I draw (strip, loop, plain lines) the result is the right side one - it is missing pixels at the corners.

|||||||||||     ||||||||||
|         |    |          |
|         |    |          |
|||||||||||     ||||||||||

Is there a way to get the left hand side result?

EDIT

Can't post code since it depends a lot on the underlying framework, but all draw calls are nothing more than glDrawElements with index buffer pointing to 4 vertices, no alpha tests.

After fiddling with coordinates as suggested arrived at this interesting result (iOS simulator):

Notice only upper left corner is missing pixels for some rectangles... All rectangles are drawn in GL_LINES mode within single draw elements call. No other things are drawn.

EDIT 2

OpenGL FAQ question 14.100 states that

OpenGL doesn't provide a mechanism to cleanly join lines that share common vertices nor to cleanly cap the endpoints.


回答1:


Shift your coordinate frame a bit so your lines fall on pixel centers:

#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;
}


来源:https://stackoverflow.com/questions/13462209/opengl-draw-rectangle-outline

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!