2017-02-23 120 views
5

有人能告訴我如何在一個座標上繪製一個白色像素,比如說(100,200)?如何在OpenGL中繪製單個像素?

我正在使用GLUT,並且到目前爲止都弄清楚瞭如何打開一個空白窗口。一旦我弄清楚如何繪製像素,我將使用它來實現Bresenham line drawing algorithm。 (是的,我知道OpenGL可以畫線,我需要自己來實現)。

#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

這對於OpenGL來說是一件很奇怪的事情,而不是真正的設計。你爲什麼使用OpenGL?我想你可以用你的線條像素創建一個紋理,然後用該紋理繪製一個三角形/四邊形,或者你可以爲每個像素渲染一個點。 – immibis

+0

您是否需要使用Deprecated Legacy OpenGL 1.0或者您是否可以使用Modern OpenGL v3.3或更高版本? –

回答

6

這是神奇的一行代碼,把讀計算器和觀看YouTube教程一整天的學習:

glVertex2i(x,y);

這裏是它需要工作上下文:

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

也是一個有效的答案,但請注意,如果glPointSize不是1(默認情況下),您可以繪製的不僅僅是一個像素。 – MuertoExcobito

0

這可以通過設置剪刀矩形輕鬆完成,然後清除,這將只清除剪刀矩形中的指定區域。例如:

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