2017-02-23 27 views
5

Birisi bir koordinatta nasıl tek bir beyaz piksel çizileceğini söyleyebilir mi, (100,200)?OpenGL'de tek bir piksel nasıl çizilir?

GLUT kullanıyorum ve bugüne kadar boş bir pencerenin nasıl açılacağını anladım. Piksel çizmeyi öğrendiğimde, bunu Bresenham line drawing algorithm'u uygulamak için kullanacağım. (Evet, OpenGL'nin çizgiler çizebileceğinin farkındayım. Bunu kendim uygulamak zorundayım).

#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

Bu, OpenGL ile ilgili bir şey değil, bunun için tasarlandığı şey değil. Neden bunun için OpenGL kullanıyorsunuz? Çizgi piksellerinizle bir doku oluşturabileceğinizi ve bu doku ile bir üçgen/dört çizebileceğinizi veya her bir piksel için bir nokta oluşturabileceğinizi varsayalım. – immibis

+0

Kullanımdan Kaldırılan Eski OpenGL 1.0'ı kullanmanız gerekiyor mu yoksa Modern OpenGL v3.3 veya üstünü kullanabilir misiniz? –

cevap

6

Bu öğrenme stackoverflow okuma ve youtube eğitimlerini izleyerek bütün bir gün sürdü kod sihirli çizgisidir:

İşte glVertex2i(x,y);

işe ihtiyacı bağlamdır:

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

Ayrıca geçerli bir cevap, ancak, glPointSize 1 değilse (bu varsayılan olarak), sadece bir pikselden daha fazla çizebileceğinizi unutmayın. – MuertoExcobito

0

Makas dikdörtgeni ayarlanarak ve sonra yalnızca makas dikdörtgeni içinde belirtilen alanı temizleyecek şekilde temizleyerek kolayca yapılabilir. Örneğin:

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