2012-11-19 41 views
7

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

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

左側の結果を得る方法はありますか?それは基本的な枠組みに多くを依存しているため

EDIT

はコードを投稿することはできませんが、すべての通話を描く4つの頂点、アルファなしのテストを指すインデックスバッファとglDrawElements以上のものではありません。お知らせのみ左上隅には、いくつかの長方形のためのピクセルが欠落してい

sample

... 全ての長方形はGL_LINESで描かれています。この興味深い結果(iOSのシミュレーター)に到着した提案として座標をいじった後

モードを呼び出します。他に何も描かれていない。 OpenGLはきれいに共通の頂点を共有する行を連結するためのメカニズムを提供していないにもきれいにエンドポイントをキャップする14.100状態

こと

EDIT 2

OpenGL FAQ質問。あなたのラインがピクセルの中心に落ちるよう

+6

を? – datenwolf

+1

また、デスクトップOpenGLまたはOpenGL ESを使用していますか? –

+0

iOSシミュレータでOpenGL ESを使用しています – Kimi

答えて

12
は、あなたの座標フレームビットシフト

:あなたは私達にあなたのコードを表示する方法について

rect

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