zoukankan      html  css  js  c++  java
  • OpenGL 第一个小程序

    #include <gl/glut.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>

    using namespace std;

    void display(void)
    {
    //清除掉所有像素
    glClear(GL_COLOR_BUFFER_BIT);
    //画一个白色多边形
    glColor3f(1.0, 1.0, 1.0);
    /*
    glBegin(GL_POLYGON);
    glVertex3f(0.25, 0.25, 0.0);
    glVertex3f(0.75, 0.25, 0.0);
    glVertex3f(0.75, 0.75, 0.0);
    glVertex3f(0.25, 0.75, 0.0);
    glEnd();
    */

    glutWireTeapot(0.5);

    //不等 OpenGL 其他地方调用,直接显示
    glFlush();
    }

    void displayMotion(int x, int y)
    {
    //这里的x,y都是相对于绘制的窗口而言的,窗口的左上角为(0,0),右下角为(250,250)
    cout<<x<<""<<y<<endl;
    }

    void displayMouse(int button, int state, int x, int y)
    {
    /*
    * 这里的x,y都是相对于绘制的窗口而言的,窗口的左上角为(0,0),右下角为(250,250)
    * button==0 左键 button==2 右键 state==0 按下 state==1 抬起
    */
    cout<<"button="<<button<<" state="<<state<<" x="<<x<<" y="<<y<<endl;
    }

    void displayKeyboard(unsigned char key, int x, int y)
    {
    /*
    * 这里的x,y都是相对于绘制的窗口而言的,窗口的左上角为(0,0),右下角为(250,250),是鼠标所在的位置
    * key 是按下去的键
    */
    cout<<"key="<<key<<" x="<<x<<" y="<<y<<endl;
    }

    void init(void)
    {
    //设置清除背景的颜色
    glClearColor(0.0, 0.0, 0.0, 0.0);
    //初始化
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    // glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);//设置坐标系 左、右、下、上、近、远
    glOrtho(0.5, 0.5, 0.5, 0.5, -1.0, 1.0);

    //这个程序画出来的图形,比例会随着窗口大小的变化而自动调整
    }

    int main(int argc, char** argv)
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//初始化显示模式:单缓冲区,RGB模式
    glutInitWindowSize(250, 250);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Hello,OpenGL");
    init();

    /*
    * 显示回调函数,当GLUT确定一个窗口的内容重新显示时,通过这个函数注册的回调函数就会执行
    * 所以应该把重绘场景所需要的所有代码都放在这个显示回调函数里
    */
    glutDisplayFunc(display);


    /*
    * 当按下鼠标并移动鼠标时调用注册函数 glutMotionFunc(void(*func)(int x, int y))
    */
    glutMotionFunc(displayMotion);


    /*
    * 当按下鼠标时调用注册函数
    */
    glutMouseFunc(displayMouse);

    /*
    * 当按下键盘上的某个键时
    */
    glutKeyboardFunc(displayKeyboard);


    /*
    * 如果程序修改了窗口的内容,有时候可能需要调用 glutPostRedisplay(),则它将会指示下面这个
    * 函数调用已注册的显示回调函数。
    * 必须调用这个函数来启动程序。已注册的显示回调函数,一旦进入循环永远不会退出
    */

    glutMainLoop();

    return 0;
    }
  • 相关阅读:
    mysql的数据类型和字段属性
    随便弄个名字 以后改
    drupal 不错的网址
    iwebshop 模板手册
    1.nginx 防注入
    DenyHosts 安装及配置详解
    drupal8 管理入门
    1.php代码块
    Drupal Nginx伪静态设置方法
    Nginx优化(十七)
  • 原文地址:https://www.cnblogs.com/lihuiyy/p/2231204.html
Copyright © 2011-2022 走看看