OpenGL学习笔记之按键检测

OpenGL学习笔记之按键检测

#include 
#include 
#include 

struct Vector2D
{
    float fX;
    float fY;
};

Vector2D g_vector2D = {-0.2f,0.2f};

void DisplayFunc()
{
    glClear(GL_COLOR_BUFFER_BIT);//用指定的颜色清屏

    glBegin(GL_TRIANGLES);

    {
        glColor3f(0,0.6f,0);
        glVertex2f(g_vector2D.fX,g_vector2D.fY);

        glColor3f(0,0.0f,0.6f);
        glVertex2f(g_vector2D.fX+0.4f,g_vector2D.fY);

        glColor3f(0.6f,0.0f,0);
        glVertex2f(g_vector2D.fX+0.2f,g_vector2D.fY-0.4f);
    }

    glEnd();

    glFlush();//提交绘图命令

    glutSwapBuffers();//交换前台缓冲与后台缓冲(GLUT_DOUBLE双缓冲模式需要)
}
//闲置时调用的函数
void IdleFunc()
{
    glutPostRedisplay();//重新绘制(即调用DisplayFunc()函数)
}
//数字、字母键按键检测
void KeyboardFunc(unsigned char Key,int x,int y)
{
    if(Key == 'w' || Key == 'W')
    {
        if(g_vector2D.fY < 1.0f)//界限判定
            g_vector2D.fY += 0.05f;
    }

    if(Key == 's' || Key == 'S')
    {
        if(g_vector2D.fY - 0.4f > -1.0f)//界限判定
            g_vector2D.fY -= 0.05f;
    }

    if(Key == 'a' || Key == 'A')
    {
        if(g_vector2D.fX > -1.0f)//界限判定
            g_vector2D.fX -= 0.05f;
    }

    if(Key == 'd' || Key == 'D')
    {
        if(g_vector2D.fX + 0.4f< 1.0f)//界限判定
            g_vector2D.fX += 0.05f;
    }
}
//F1~F12、控制键检测
void SpecialFunc(int Key,int x,int y)
{
    if(Key == GLUT_KEY_UP)
    {
        if(g_vector2D.fY < 1.0f)//界限判定
            g_vector2D.fY += 0.05f;
    }

    if(Key == GLUT_KEY_DOWN)
    {
        if(g_vector2D.fY - 0.4f > -1.0f)//界限判定
            g_vector2D.fY -= 0.05f;
    }

    if(Key == GLUT_KEY_LEFT)
    {
        if(g_vector2D.fX > -1.0f)//界限判定
            g_vector2D.fX -= 0.05f;
    }

    if(Key == GLUT_KEY_RIGHT)
    {
        if(g_vector2D.fX + 0.4f< 1.0f)//界限判定
            g_vector2D.fX += 0.05f;
    }
}

//第一个参数是命令的个数,第二个参数是命令内容
int main(int argc,char** argv)
{
    std::cout<std::endl;//输出命令个数

    for(int i = 0; i < argc; ++i)//输出命令内容
    {
        std::cout<std::endl;
    }

    glutInit(&argc,argv);//初始化glut库(创建窗口需要)

    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);//初始化显示模式 GLUT_RGBA 颜色 GLUT_DOUBLE 双缓冲

    glutInitWindowPosition(100,100);//初始化我们创建的窗口在屏幕左上角的位置

    glutInitWindowSize(600,600);//初始化创建窗口的宽高

    int iWindowID = glutCreateWindow("OpenGL");//创建窗口,并返回窗口的ID,传窗口的标题

    glutDisplayFunc(DisplayFunc);//屏幕显示的回调函数

    glutIdleFunc(IdleFunc);//闲置时回调函数(当没有消息时调用)

    glutKeyboardFunc(KeyboardFunc);//数字、字母键的按键检测的回调函数

    glutSpecialFunc(SpecialFunc);//特殊按键检测(F1~F12,控制键)

    glEnable(GL_LINE_STIPPLE);//开启画虚线的模式

    glClearColor(0.0f,0.6f,0.6f,1.0f);//指定屏幕背景色,最后参数为透明度

    glutMainLoop();//消息主循环

    //glutDestroyWindow(iWindowID);//销毁窗口

    return 1;
}

//W、S、A、D控制三角形移动
//方向键也可以控制三角形移动
OpenGL学习笔记之按键检测_第1张图片

你可能感兴趣的:(OpenGL学习笔记)