2012-11-19 15 views
7

Próbuję narysować prostokąt z 4 liniami (po lewej). Ale bez względu na to, jak rysuję (pasek, pętla, proste linie), wynik jest po prawej stronie - brakuje pikseli w rogach.Rysowanie prostokąta prostokątnego OpenGL

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

Czy istnieje sposób, aby uzyskać wynik lewe skrzydła?

EDIT

Nie można pisać kod, ponieważ zależy wiele na temat podstawowych ram, ale wszystko narysować połączenia nie są niczym więcej niż glDrawElements buforem indeks wskazujący na 4 wierzchołków, żadne testy alfa.

Po błahy ze współrzędnymi jak sugeruje przybył do tego ciekawego wyniku (iOS symulatora):

sample

Wskazówka tylko lewym górnym rogu brakuje pikseli dla niektórych prostokątów ... Wszystkie prostokąty są rysowane w GL_LINES w trybie pojedynczego wywołania elementów. Żadne inne rzeczy nie są narysowane.

EDIT 2

OpenGL FAQ pytanie 14.100 stwierdza, że ​​

OpenGL nie przewidują mechanizm czysto przyłączenia linii, które dzielą ze sobą wspólne wierzchołki ani czysto czapka punkty końcowe.

+6

Jak o pokażesz nam swój kod? – datenwolf

+1

Czy używasz pulpitu OpenGL lub OpenGL ES? –

+0

Używam OpenGL ES na symulatorze iOS – Kimi

Odpowiedz

12

Przenieś koordynować rama trochę tak spaść swoje linie na centrach pikseli:

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; 
} 
Powiązane problemy