如何在OpenGL中绘制单个像素?

qua*_*fly 9 c++ opengl

有人能告诉我如何在坐标处绘制一个白色像素,比方说(100,200)?

我正在使用GLUT,到目前为止已经找到了如何打开一个空白窗口.一旦我弄清楚如何绘制像素,我将使用它来实现Bresenham线条绘制算法.(是的,我知道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();
}
Run Code Online (Sandbox Code Playgroud)

qua*_*fly 17

这是一段神奇的代码,花了一整天的时间阅读stackoverflow并观看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();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,据我了解 OpenGL,这个答案使用旧代码。运行它的设备的驱动程序必须支持 OpenGL 的兼容性配置文件才能正常工作。 (2认同)

Mue*_*ito 5

这可以通过设置剪刀矩形,然后清除来轻松完成,这只会清除剪刀矩形中的指定区域。例如:

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:
glDisable(GL_SCISSOR_TEST); 
Run Code Online (Sandbox Code Playgroud)