几何变换 之 平移glTranslatef 旋转glRotatef
程序员文章站
2022-07-12 23:22:58
...
代码实现功能如下:
绘制一个小球,并且实现用两个键来控制一个小球前进与后退的滚动效果,其中按F键前进,按B键后退。
#include <GL/glut.h>
#include <stdlib.h>
static int day = 0;
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT); //将窗口的背景设置为当前清空颜色
glColor3f (1.0, 0.0, 0.0);
glPushMatrix(); //把当前矩阵压入堆栈
//glutWireSphere(1.0, 20, 16); /* draw sun */
//glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
//glTranslatef (1.0, 0.0, 0.0); //平移矩阵构造函数,把当前矩阵和一个表示移动物体的矩阵相乘
glTranslatef ((GLfloat) day/360*0.3*3.1415, 0.0, 0.0);
glRotatef ((GLfloat) (day%360), 0.0, 0.0, 1.0);//旋转矩阵构造函数,把当前矩阵和一个表示旋转物体的矩阵相乘
glutWireSphere(0.3, 10, 10); // draw smaller planet 绘制球体并指定球体的大小。
glPopMatrix(); //从堆栈栈顶弹出一个矩阵为当前矩阵
glutSwapBuffers();
}
void reshape (int w, int h) //窗口被移动或修改大小后的宽度和高度
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);//调整像素矩形,用于绘制整个窗口
glMatrixMode (GL_PROJECTION);//接下来三个函数调整绘图坐标系,使左下角位置为(0, 0),右上角为(w, h)
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW); //设置当前操作的矩阵为“模型视图矩阵”,指定一个4×4的建模矩阵作为当前矩阵
glLoadIdentity(); //把当前矩阵设置为单位矩阵
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //指定视图变换,把照相机放在(0,0,5),镜头瞄准(0,0,0),朝上向量定为(0,1,0)
//如果没有调用gluLookAt(),默认的情况下,照相机位于原点,指向Z轴负方向,朝上向量为(0,1,0)
}
void keyboard (unsigned char key, int x, int y)
{
switch (key) {
case 'F':
day = day + 10;
glutPostRedisplay();
break;
case 'B':
day = day - 10;
glutPostRedisplay();
break;
/*
case 'y':
year = (year + 5) % 360;
glutPostRedisplay();
break;
case 'Y':
year = (year - 5) % 360;
glutPostRedisplay();
break;
*/
case 27:
exit(0);
break;
default:
break;
}
}
int main(int argc, char** argv){
glutInit(&argc, argv); //对GLUT进行初始化
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(100, 100); //设置窗口在屏幕中的位置
glutInitWindowSize(500, 500); //设置窗口的大小
glutCreateWindow (argv[0]); //参数将被作为窗口的标题
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
肝了一下午,,,我好难啊!!!
上一篇: Feign配置
下一篇: Spring Cloud整合Feign