8

4 本の線 (左の線) で長方形を描画しようとしています。しかし、どのように描いても(ストリップ、ループ、プレーンライン)、結果は右側のものです-コーナーにピクセルがありません。

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

左側の結果を取得する方法はありますか?

編集

基礎となるフレームワークに大きく依存するため、コードを投稿できませんが、すべての描画呼び出しは、4 つの頂点を指すインデックス バッファーを持つ glDrawElements に過ぎず、アルファ テストはありません。

提案されたように座標をいじった後、この興味深い結果に到達しました(iOSシミュレーター):

サンプル

一部の長方形では、左上隅のみにピクセルが欠落していることに注意してください... すべての長方形は、単一の描画要素呼び出し内で GL_LINES モードで描画されます。他のものは描かれていません。

編集2

OpenGL FAQの質問 14.100 には、次のように記載されています。

OpenGL は、共通の頂点を共有する線をきれいに結合したり、端点をきれいにキャップしたりするメカニズムを提供しません。

4

1 に答える 1

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;
}
于 2012-11-19T21:37:14.373 に答える