#include <windows.h>
#include <gl/Gl.h>
#include <gl/Glu.h>
#include <gl/glut.h>
#pragma comment(lib, "glut.lib")
#ifndef WINDOW_WIDTH
#define WINDOW_WIDTH 800 //为窗口宽度定义的宏,以方便在此处修改窗口宽度
#define WINDOW_HEIGHT 600 //为窗口高度定义的宏,以方便在此处修改窗口高度
#endif
void myKeyboard(unsigned char key, int x, int y)
{
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
switch(key)
{
case 'a': case 'A': glTranslated(0.1, 0, 0); break; //向左平移0.1
case 'd': case 'D': glTranslated(-0.1, 0, 0); break; //向右平移0.1
case 'w': case 'W': glTranslated(0, 0.1, 0); break; //向上平移0.1
case 's': case 'S': glTranslated(0, -0.1, 0); break; //向下平移0.1
case 'q': case 'Q': glTranslated(0, 0, 0.1); break; //向外平移0.1
case 'e': case 'E': glTranslated(0, 0, -0.1); break; //向里平移0.1
case 'j': case 'J': glRotated(10, 0, 1, 0); break; //绕y轴旋转10度
case 'l': case 'L': glRotated(10, 0, -1, 0); break;
case 'i': case 'I': glRotated(10, 1, 0, 0); break; //绕x轴旋转10度
case 'k': case 'K': glRotated(10, -1, 0, 0); break;
case 'u': case 'U': glRotated(10, 0, 0, 1); break; //绕z轴旋转10度
case 'o': case 'O': glRotated(10, 0, 0, -1); break;
case 'z': case 'Z': glScalef(1.5, 1.5, 1.5); break; //放大
case 'x': case 'X': glScalef(0.5, 0.5, 0.5); break; //缩小
default: break;
}
glutPostRedisplay(); //重新绘制
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutWireTeapot(0.3); //绘制茶壶
//glTranslated(0, 0, 0);
glFlush();
glutSwapBuffers(); //显示刚才绘制的图像,双缓冲
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(50, 50);
glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
glutCreateWindow("DEMO");
glClearColor(1, 0, 0, 0); //背景颜色为红色
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_ALWAYS);
glutKeyboardFunc(myKeyboard);
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}
OpenGL---物体变换
最新推荐文章于 2024-08-04 23:35:23 发布