zoukankan      html  css  js  c++  java
  • OpenGL鼠标控制绘制矩形

    #include <windows.h>    // Windows的头文件

    #include <gl\gl.h> // OpenGL32库的头文件
    #include <gl\glu.h> // GLu32库的头文件
    #include <gl\glaux.h> // GLaux库的头文件
    #include <gl\glut.h> // Glut库头文件

    #pragma comment( lib, "opengl32.lib") // OpenGL32连接库
    #pragma comment( lib, "glu32.lib") // GLu32连接库
    #pragma comment( lib, "glaux.lib") // GLaux连接库
    #pragma comment( lib, "glut.lib") // Glut链接库

    struct GLintPoint
    {
    GLint x,y;

    };

    GLintPoint corner[2];
    bool selected = false;
    int screenWidth=640;
    int screenHeight=480;

    void myDisplay()
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glColor3f(1.0f,1.0f,1.0f);
    if(selected)
    {
    glBegin(GL_QUADS);
    glVertex2i(corner[0].x,corner[0].y);
    glVertex2i(corner[0].x,corner[1].y);
    glVertex2i(corner[1].x,corner[1].y);
    glVertex2i(corner[1].x,corner[0].y);
    glEnd();
    }
    glutSwapBuffers();

    }

    void myMouse(int button,int state,int x,int y)
    {
    if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
    {
    corner[0].x=x;
    corner[0].y=screenHeight-y;
    selected=true;
    }
    glutPostRedisplay();

    }

    void myPassiveMotion(int x,int y)
    {
    corner[1].x=x;
    corner[1].y=screenHeight-y;
    glutPostRedisplay();

    }

    int main(int argc,char **argv)
    {
    glutInit(&argc,argv);
    glutInitWindowSize(screenWidth,screenHeight);
    glutInitWindowPosition(0,0);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutCreateWindow("Rubber Rect Demo");

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0,screenWidth,0,screenHeight);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0.0f,0.0f,0.0f,0.0f);
    glViewport(0,0,screenWidth,screenHeight);

    glutMouseFunc(myMouse);
    glutDisplayFunc(myDisplay);
    glutPassiveMotionFunc(myPassiveMotion);

    glutMainLoop();
    return 0;

    }
  • 相关阅读:
    java8新特性学习:stream与lambda
    Storm实践(一):基础知识
    Google Protocol Buffer入门
    zeromq实践
    maven实践--你所需要了解的maven
    springcloud实践(一)服务发现:Eureka
    职责链模式(chain of responsibility Pattern)
    代理模式 (Proxy Pattern)
    享元模式(Flyweight Pattern)
    外观模式(Facade Pattern)
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2328794.html
Copyright © 2011-2022 走看看