主要就是用一些最基本的原理绘制直线矩形等等,最基本的算法就是DDA算法、bresenham算法。
1、鼠标交互式的
#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;
}
键盘交互式的图像绘制
#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;
}
基于DDA算法
#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();
};
效果展示平移、缩放、旋转等等。