it-swarm.com.de

Wie zeichnet man ein einzelnes Pixel in OpenGL?

Kann mir jemand sagen, wie man ein einzelnes weißes Pixel an einer Koordinate zeichnet, zum Beispiel (100.200)?

Ich benutze GLUT und habe bisher herausgefunden, wie man ein leeres Fenster öffnet. Sobald ich herausgefunden habe, wie man Pixel zeichnet, werde ich das verwenden, um den Bresenham-Strichzeichnungsalgorithmus zu implementieren. (Ja, ich bin mir bewusst, dass OpenGL Linien zeichnen kann. Ich muss dies selbst implementieren.).

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

Dies ist die magische Codezeile, die einen ganzen Tag brauchte, um stackoverflow zu lesen und Youtube-Tutorials anzuschauen:

glVertex2i(x,y);

Hier ist der Kontext, den es zum Arbeiten braucht:

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();
13

Dies kann leicht durch Setzen des Scherenrechtecks ​​und anschließendes Löschen erreicht werden, wodurch nur der angegebene Bereich im Scherenrechteck gelöscht wird. Zum Beispiel:

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); 
0
MuertoExcobito