Opengl es OpenGL绘制矩形轮廓

Opengl es OpenGL绘制矩形轮廓,opengl-es,Opengl Es,我试图画一个有4条线的矩形(左一条)。但不管我怎么画(条状、环形、普通线),结果都是右边的——角落缺少像素 ||||||||||| |||||||||| | | | | | | | | ||||||||||| |||||||||| 有没有办法得到左手边的结果 编辑 无法发布代码,因为它在很大程度上依赖于底层框架,但所有的draw调用都只不过是glDrawElements,索引缓冲区指向4个顶点,没有

我试图画一个有4条线的矩形(左一条)。但不管我怎么画(条状、环形、普通线),结果都是右边的——角落缺少像素

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

编辑

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

按照建议摆弄坐标后,得出了这个有趣的结果(iOS模拟器):

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

编辑2

问题14.100指出

OpenGL没有提供一种机制来干净地连接共享公共顶点的线,也没有干净地覆盖端点


稍微移动坐标帧,使线条落在像素中心:

#包括
无效显示()
{
glClear(GLU颜色缓冲位);
glMatrixMode(GL_投影);
glLoadIdentity();
双w=glutGet(GLUT\U窗口\U宽度);
双h=glutGet(GLUT\U窗口\U高度);
格洛托(0,w,0,h,-1,1);
glMatrixMode(GLU模型视图);
glLoadIdentity();
//重要的
glTranslatef(0.5,0.5,0);
浮动偏移=40;
glColor3ub(255,0,0);
glBegin(GL_线_环);
glVertex2f(0+偏移,0+偏移);
glVertex2f(0+偏移,h-偏移);
glVertex2f(w偏移,h偏移);
glVertex2f(w偏移,0+偏移);
格伦德();
glutSwapBuffers();
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(320240);
创建窗口(“Rect”);
glutDisplayFunc(显示器);
glutMainLoop();
返回0;
}

给我们看看你的代码怎么样?另外,你是在使用桌面OpenGL还是OpenGL ES?我在iOS模拟器上使用OpenGL ES
#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;
}