OpenGL

来源:互联网 发布:linux书籍推荐 知乎 编辑:程序博客网 时间:2024/06/01 09:35

鼠标左键加速旋转,右键减速。


代码如下:

#include<gl/glut.h>#include<math.h>#include<windows.h>#include<algorithm>using namespace std;float angle = 0;float speed = 0.1;void myDisplay(){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    //清除颜色缓存和深度缓存    glLoadIdentity();       //初始化坐标位置    /*    glTranslatef();     //平移    glScaled();     //缩放    glRotatef();        //旋转    */    glTranslated(0, 0, -6);    glRotatef(angle, 0, 1, 0);    glBegin(GL_TRIANGLES);    glColor3f(1.0f, 0.0f, 0.0f);  glVertex3f(0.0f, 1.0f, 0.0f);    glColor3f(0.0f, 1.0f, 0.0f);  glVertex3f(-1.0f, -1.0f, 1.0f);    glColor3f(0.0f, 0.0f, 1.0f);  glVertex3f(1.0f, -1.0f, 1.0f);    glColor3f(1.0f, 0.0f, 0.0f);  glVertex3f(0.0f, 1.0f, 0.0f);    glColor3f(0.0f, 0.0f, 1.0f);  glVertex3f(1.0f, -1.0f, 1.0f);    glColor3f(0.0f, 1.0f, 0.0f);  glVertex3f(1.0f, -1.0f, -1.0f);    glColor3f(1.0f, 0.0f, 0.0f);  glVertex3f(0.0f, 1.0f, 0.0f);    glColor3f(0.0f, 1.0f, 0.0f);  glVertex3f(1.0f, -1.0f, -1.0f);    glColor3f(0.0f, 0.0f, 1.0f);  glVertex3f(-1.0f, -1.0f, -1.0f);    glColor3f(1.0f, 0.0f, 0.0f);  glVertex3f(0.0f, 1.0f, 0.0f);    glColor3f(0.0f, 0.0f, 1.0f);  glVertex3f(-1.0f, -1.0f, -1.0f);    glColor3f(0.0f, 1.0f, 0.0f);  glVertex3f(-1.0f, -1.0f, 1.0f);    glEnd();    angle += speed;    if (angle > 360)        angle -= 360.0;    glutSwapBuffers();}void mouse(int button, int state, int x, int y)       //监听鼠标动作{    if (button == GLUT_LEFT_BUTTON && state == GLUT_UP)    {        speed = min(1.0, speed + 0.01);    }    else if (button == GLUT_RIGHT_BUTTON && state == GLUT_UP)    {        speed = max(0.01, speed - 0.01);    }}void Reshape(int w, int h)      //两个参数:窗口被移动后大小{    glViewport(0, 0, w, h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluPerspective(45.0f, (GLfloat)w / (GLfloat)h, 0.1f, 100.0f);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();}void initWindow(int &argc, char *argv[], int width, int height, char *title)    //初始化并显示到屏幕中央{    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);       //使用双缓存模式和深度缓存    glutInitWindowPosition((GetSystemMetrics(SM_CXSCREEN) - width) >> 1, (GetSystemMetrics(SM_CYSCREEN) - height) >> 1);       //指定窗口位置    glutInitWindowSize(width, height);       //指定窗口大小    glutCreateWindow(title);    glClearColor(0, 0, 0, 0.0);    glShadeModel(GL_SMOOTH);    glEnable(GL_DEPTH_TEST);//激活深度测试}int main(int argc, char *argv[]){    initWindow(argc, argv, 500, 500, "Hermite");    puts("左键加速,右键减速");    glutDisplayFunc(myDisplay);    glutReshapeFunc(Reshape);    glutMouseFunc(mouse);    glutIdleFunc(myDisplay);    glutMainLoop();    return 0;}

这里写图片描述

原创粉丝点击