The main thing is to use some of the most basic principles to draw straight lines, rectangles, etc. The most basic algorithms are DDA algorithm and bresenham algorithm.
1. Mouse interactive
#include <GL/glut.h>
GLint w=600,h=500;
GLint dx=0,dy=0;
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.5,0.6,0.7);
glPointSize(5);
glBegin(GL_POLYGON);
glVertex2i(100+dx,100+dy);
glVertex2i(100+dx,500+dy);
glVertex2i(300+dx,250+dy);
glEnd();
glFlush();
}
void mouseMotion(GLint button, GLint state, GLint x,GLint y)
{
if(button==GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
dx=x;
dy=h-y;
glutPostRedisplay();
}
}
void init()
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(200,300);
glutInitWindowSize(w,h);
glutCreateWindow("鼠º¨®标À¨º绘?制?");
init();
glutDisplayFunc(myDisplay);
glutMouseFunc(mouseMotion);
glutMainLoop();
return 0;
}
Keyboard interactive image drawing
#include <GL/glut.h>
int xd=0,yd=0;
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.5,0.6,0.7);
glPointSize(5);
glBegin(GL_POLYGON);
glVertex2i(10+xd,10+yd);
glVertex2i(20+xd,40+yd);
glVertex2i(50+xd,60+yd);
glEnd();
glFlush();
}
void myKeyBorad(unsigned char key,int x,int y)
{
switch(key)
{
case 'w':yd++; break;
case 's':yd--; break;
case 'a':xd--; break;
case 'd':xd++; break;
}
glutPostRedisplay();
}
void init()
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-100,100,-100,100);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(200,300);
glutInitWindowSize(300,300);
glutCreateWindow("鼠º¨®标À¨º绘?制?");
init();
glutDisplayFunc(myDisplay);
glutKeyboardFunc(myKeyBorad);
glutMainLoop();
return 0;
}
Based on DDA algorithm
#include <GL/glut.h>
#include<math.h>
void mydisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(3);
glBegin(GL_LINES);
glColor3f(0.3,0.1,0.8);
glVertex2i(-100,10);
glVertex2i(100,10);
glEnd();
glBegin(GL_LINES);
glColor3f(0.3,0.1,0.8);
glVertex2i(0,-100);
glVertex2i(0,100);
glEnd();//建¡§立¢¡é坐Á?标À¨º系¦Ì
//glBegin(GL_POINTS);//点Ì?的Ì?绘?制?
//glBegin(GL_LINE_STRIP);//线?段?绘?制?
//glBegin(GL_LINES);
//glBegin(GL_LINE_LOOP);//多¨¤边À?形?绘?制?
//glBegin(GL_POLYGON);//多¨¤边À?形?绘?制?填¬?充?
//glBegin(GL_TRIANGLES);//三¨y角?形?绘?制?填¬?充?
//glBegin(GL_QUADS);//绘?制?四?边À?形?
glBegin(GL_POLYGON);//填¬?充?的Ì?四?边À?形?
glColor3f(3.0,2.1,0.8);
glVertex2i(10,10);
glVertex2i(50,10);
glVertex2i(50,40);
glVertex2i(10,40);
glEnd();
//glTranslatef(-50,-50,0);//平?移°?
//glRotatef(30,0,0,1);//旋y转Áa
glScalef(2,2,1);//缩?放¤?
glBegin(GL_POLYGON);//填¬?充?的Ì?四?边À?形?
glColor3f(0.8,0.6,0.5);
glVertex2i(10,10);
glVertex2i(50,10);
glVertex2i(50,40);
glVertex2i(10,40);
glEnd();
glFlush();
};
void init()
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-100,100,-100,100);
};
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(300,300);
glutInitWindowSize(600,500);
glutCreateWindow("二t维?变À?换?");
init();
glutDisplayFunc(mydisplay);
glutMainLoop();
};
Effects show translation, scaling, rotation, etc.