2017-02-23 34 views
5

Czy ktoś może mi powiedzieć, jak narysować pojedynczy biały piksel na współrzędnej, powiedzmy (100200)?Jak narysować pojedynczy piksel w OpenGL?

Używam GLUT i jak dotąd zorientowałem się, jak otworzyć puste okno. Kiedy wymyślę, jak narysować piksele, użyję go do wdrożenia Bresenham line drawing algorithm. (Tak, zdaję sobie sprawę, że OpenGL może rysować linie, ja sam muszę to wdrożyć).

#include <stdio.h> 
#include <GL/glut.h> 

static int win(0); 

int main(int argc, char* argv[]){ 
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE); 
    glutInitWindowSize(500,500); 
    glutInitWindowPosition(100,100); 

    //step 2. Open a window named "GLUT DEMO" 
    win = glutCreateWindow("GLUT DEMO"); 
    glClearColor(0.0,0.0,0.0,0.0); //set background 

    glClear(GL_COLOR_BUFFER_BIT); 
    glFlush(); 
    glutMainLoop(); 
} 
+1

Jest to dziwna sprawa w przypadku OpenGL, a nie do czego jest przeznaczona. Dlaczego używasz OpenGL? Przypuszczam, że można utworzyć teksturę z liniowymi pikselami i narysować trójkąt/kwadrat z tą teksturą, lub można wyrenderować punkt dla każdego piksela. – immibis

+0

Czy wymagane jest używanie wycofanego starszego OpenGL 1.0, czy można użyć Modern OpenGL v3.3 lub nowszego? –

Odpowiedz

6

To magiczne linii kodu, które trwało cały dzień czytania stackoverflow i oglądania youtube samouczki do nauki:

glVertex2i(x,y);

Oto kontekst musi działać:

glutInit(&argc, argv); 
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 

glutInitWindowPosition(80, 80); 
glutInitWindowSize(500,500); 

glutCreateWindow("A Simple OpenGL Program"); 

glClear(GL_COLOR_BUFFER_BIT); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluOrtho2D(0.0, 500.0, 500.0,0.0); 

glBegin(GL_POINTS); 
    glColor3f(1,1,1); 
    glVertex2i(100,100); 
glEnd(); 
+0

Również poprawna odpowiedź, chociaż należy pamiętać, że można rysować więcej niż jeden piksel, jeśli glPointSize nie jest równy 1 (który jest domyślnie). – MuertoExcobito

0

Można to łatwo zrobić, ustawiając prostokąt nożyczek, a następnie czyszcząc, co spowoduje jedynie usunięcie określonego obszaru w prostokącie nożycowym. Na przykład:

glEnable(GL_SCISSOR_TEST); 
glScissor(100, 200, 1, 1); 
glClearColor(1,1,1,1); 
glClear(GL_COLOR_BUFFER_BIT); 
// Remember to disable scissor test, or, perhaps reset the scissor rectangle: 
glEnable(GL_SCISSOR_TEST);