2017-02-23 18 views
5

座標(例えば、100,200)で白いピクセルを1つ描く方法を教えてもらえますか?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を使用する必要がありますか、現代OpenGL v3.3以上を使用できますか? –

答えて

6

このstackoverflowのを読み、学ぶためにユーチューブのチュートリアルを見ての全体の日を取ったコードの魔法行されます。

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でない場合(デフォルトでは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);