zoukankan      html  css  js  c++  java
  • Open Graphics Library初步_摄影机_GLUT

    直接把代码弄进来,课上如果能讲到的话……

    View Code
    #include <gl/glut.h>
    #include <math.h>

    const float PI = 3.1416;
    float ax = 0.0f;
    float ay = 0.0f;
    float az = 0.0f;
    double et1 = 0.0;
    double et2 = 0.0;
    double d = 500.0;

    int mx = 0;
    int my = 0;

    void Drawing_Box(){

    glPushMatrix();
    glPolygonMode(GL_BACK,GL_LINE);
    glTranslatef(0.0f, 0.0f, 100.0f);
    glRotatef(ax, 1.0f, 0.0f, 0.0f);
    glRotatef(ay, 0.0f, 1.0f, 0.0f);
    glRotatef(az, 0.0f, 0.0f, 1.0f);

    glColor3f( 1.0f, 0.0f, 0.0f );
    // 正方体
    glutSolidCube(100);

    /*
    glBegin( GL_QUADS );
    glColor3f(1.0f,0.0f,0.0f);
    glVertex3f(100.0f,100.0f,-100.0f);
    glVertex3f(-100.0f,100.0f,-100.0f);
    glVertex3f(-100.0f,-100.0f,-100.0f);
    glVertex3f(100.0f,-100.0f,-100.0f);

    glColor3f(0.0f,1.0f,0.0f);
    glVertex3f(100.0f,-100.0f,100.0f);
    glVertex3f(-100.0f,-100.0f,100.0f);
    glVertex3f(-100.0f,100.0f,100.0f);
    glVertex3f(100.0f,100.0f,100.0f);
    glEnd();
    */
    glPopMatrix();

    // 地面
    glPushMatrix();
    glBegin( GL_QUADS );
    glColor3f( 1.0f, 1.0f, 1.0f );
    glVertex3f(100.0f,100.0f,0.0f);
    glVertex3f(-100.0f,100.0f,0.0f);
    glVertex3f(-100.0f,-100.0f,0.0f);
    glColor3f( 0.5f, 0.5f, 1.0f );
    glVertex3f(100.0f,-100.0f,0.0f);
    glEnd();
    glPopMatrix();
    }

    void Drawing(){
    glPushMatrix();
    glTranslatef(0.0f, 0.0f, 0.0f);
    glRotatef(ax, 1.0f, 0.0f, 0.0f);
    glRotatef(ay, 0.0f, 1.0f, 0.0f);
    glRotatef(az, 0.0f, 0.0f, 1.0f);
    glBegin( GL_LINES );{
    for(float t=.0f; t<=PI; t+=.1f){
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex3f(cosf(t)*100.0f,sinf(t)*100.0f,0.0f);
    glVertex3f(0,0,0);

    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex3f(0.0f,cosf(t)*100.0f,sinf(t)*100.0f);
    glVertex3f(0,0,0);

    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex3f(sinf(t)*100.0f,0.0f,cosf(t)*100.0f);
    glVertex3f(0,0,0);
    }
    }glEnd();
    glPopMatrix();
    }

    void SetEye()
    {
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    double eyex;
    double eyey;
    double eyez;
    double upx;
    double upy;
    double et2b = 90.0 - et2;
    double et1b = -et1;
    eyex = d * sin(et2b) * cos(et1b);
    eyey = d * sin(et2b) * sin(et1b);
    double temp = cos(et2b);
    eyez = d * temp;

    upx = - eyex * (eyez>0?1:-1);
    upy = eyey / upx * eyex;
    gluLookAt(eyex,eyey,eyez, 0,0,0, upx,upy,0);
    }

    void OnReshape(int w, int h){

    double ar = (double)w/(double)h;
    glViewport(0, 0, w, h);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();

    /*
    if(w>=h){
    glOrtho(-300*ar, 300*ar, -300, 300, 0, 600);
    }else{
    glOrtho(-300, 300, -300/ar, 300/ar, 0, 600);
    }

    */

    gluPerspective( 60.0f, ar, 1, 800 );
    /*
    if(w>=h){
    glFrustum(-ar*50.0f, ar*50.0f, -50.0f, 50.0f, 50, 800);
    }else{
    glFrustum(-50.0f, 50.0f, -50.0f/ar, 50.0f/ar, 50, 800);
    }
    */

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    gluLookAt(200,-400,500, 0,0,100, -1,2,0);

    GLfloat ambientLight[] = {.3f, .3f, .3f, 1.0f};
    GLfloat diffuseLight[] = {.7f, .7f, .7f, 1.0f};
    glEnable(GL_DEPTH_TEST);
    glFrontFace(GL_CCW);
    glEnable(GL_CULL_FACE);
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
    glEnable(GL_LIGHT0);
    glEnable(GL_COLOR_MATERIAL);
    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
    glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
    glEnable(GL_NORMALIZE);
    }

    void OnDisplay(){
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    SetEye();
    Drawing_Box();
    glutSwapBuffers();
    }

    void OnTimer(int flag){
    ax += 0.42f;
    ay += 0.5f;
    az += 0.1f;
    //et1 += 0.005f;
    //et2 = PI / 3;
    OnDisplay();
    glutTimerFunc(10, OnTimer, 101);
    }

    void OnMouse(int button, int state, int x, int y){
    if(button == GLUT_DOWN){
    mx = x;
    my = y;
    }
    }

    void OnMotion(int x, int y){
    et1 += (double)(x - mx)/100.0;
    et2 += (double)(y - my)/100.0;
    mx = x;
    my = y;
    }

    int main(int argc, char* argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
    glutInitWindowPosition(0,0);
    glutInitWindowSize(800,600);
    glutCreateWindow("窗口标题");
    glutDisplayFunc(OnDisplay);
    glutReshapeFunc(OnReshape);
    glutTimerFunc(10, OnTimer, 101);
    glutMouseFunc(OnMouse);
    glutMotionFunc(OnMotion);
    glutMainLoop();
    return 0;
    }



  • 相关阅读:
    npm 安装卸载模块 & ionic插件安装与卸载
    Vue中v-model解析、sync修饰符解析
    Vue props用法详解
    vue页面跳转
    Swift 4 中的泛型
    Swift枚举的全用法
    蓝牙 BLE 三种 UUID 格式转换
    SVG图案
    SVG渐变
    SVG坐标系统及图形变换
  • 原文地址:https://www.cnblogs.com/cheetahw/p/2251996.html
Copyright © 2011-2022 走看看