例子:实现小方块的移动
#include
int xd = 0, yd = 0;
void myDisplay()
{
int p1[] = { 10 + xd,10 + yd };
int p2[] = { 20 + xd,10 + yd };
int p3[] = { 20 + xd,0 + yd };
int p4[] = { 10 + xd,0 + yd };
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.8, 0.5, 0.6);
glPointSize(5);
//glBegin(GL_POINTS);
//glBegin(GL_LINES);
//glBegin(GL_LINE_STRIP);
//glBegin(GL_LINE_LOOP);
//glBegin(GL_POLYGON);//多边形
//glBegin(GL_TRIANGLES);//三角形
glBegin(GL_QUADS);//四边形
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
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(-20, 30, -20, 30);
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(300, 100);
glutInitWindowSize(600, 500);
glutCreateWindow("key interaction");
init();
glutDisplayFunc(myDisplay);
glutKeyboardFunc(myKeyBorad);//键盘交互
glutMainLoop();
return 0;
}
例子:实现小方块的移动
#include
GLint w = 600, h = 500;
GLint xd = 0, yd = 0;
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.87, 0.56, 0.4);
glPointSize(2);
//glBegin(GL_POINTS);
//glBegin(GL_LINES);
//glBegin(GL_LINE_STRIP);
//glBegin(GL_LINE_LOOP);
//glBegin(GL_TRIANGLES);//三角形
//glBegin(GL_QUADS);//四边形
glBegin(GL_POLYGON);//多边形
glVertex2i(10 + xd, 10 + yd);
glVertex2i(10 + xd,100 + yd);
glVertex2i(100 + xd,100 + yd);
glVertex2i(100 + xd,10 + yd);
glEnd();
glFlush();
}
void mouseMotion(GLint button, GLint state, GLint x, GLint y)
{
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)//当鼠标左键按下去的时候
{
xd = x;//改变全局变量xd,改变矩形的位置
yd = h - y;//注意这里是h-y
glutPostRedisplay();
}
}
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(0, w, 0, h);
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(300, 100);
glutInitWindowSize(w, h);
glutCreateWindow("Mouse Motion");
init();
glutDisplayFunc(myDisplay);
//glutKeyboardFunc(myKeyBorad);
glutMouseFunc(mouseMotion);
glutMainLoop();
return 0;
}
#include
#include
GLint w = 600, h = 500;
GLint xd = 0, yd = 0;
void myDDA(GLfloat x1,GLfloat y1,GLfloat xn,GLfloat yn)
{
float dx = fabs(xn - x1);//注意这里需要绝对值
float dy = fabs(yn - y1);//注意这里abs会报错
float steps;
if (dx > dy)
steps = dx;
else
steps = dy;
float stepX = dx / steps;
float stepY = dy / steps;
glBegin(GL_POINTS);
for (int i=0; i < (int)steps; i++) {
glVertex2f(x1, y1);
x1 += stepX;
y1 += stepY;
}
}
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.87, 0.56, 0.4);
glPointSize(1);
myDDA(1.5, 3.8, 189.8, 267.5);//调用myDDA
glEnd();
glFlush();
}
void init()
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-10, w, 0, h);
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(300, 100);
glutInitWindowSize(w, h);
glutCreateWindow("DDA application");
init();
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}
