青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

Build 3D Environment

Posted on 2011-11-20 15:22 eryar 閱讀(2099) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

利用OpenGL創(chuàng)建一個(gè)3D空間,便于觀察三維的曲面。程序?qū)崿F(xiàn):

1. 設(shè)置投影使用 glOrtho(),而不是gluOrtho2D();

2. 增加光照效果;

3. 畫出三維坐標(biāo)軸,且可通過方向鍵來旋轉(zhuǎn)視圖;

源程序有三個(gè)文件:Main.cpp、CordinateAxis.h、CordinateAxis.cpp;其中類CCordinateAxis用來繪坐標(biāo)軸。

程序代碼如下:

   1:  // Main.cpp
   2:  // OpenGL 3D Environment
   3:   
   4:  #include <gl\glut.h>
   5:  #include <iostream>
   6:  #include "CordinateAxis.h"
   7:  using namespace std;
   8:   
   9:  void    Initialize(void);
  10:  void    DrawScene(void);
  11:  void    myReshape(GLsizei w, GLsizei h);
  12:  void    myKeyFunc(GLubyte key, GLint x, GLint y);
  13:  void    mySpecFunc(GLint  key, GLint x, GLint y);
  14:   
  15:  GLint    leftRight    =    0;
  16:  GLint    upDown        =    0;
  17:   
  18:  void main(int argc, char* argv[]) {
  19:      glutInit(&argc, argv);                // Initialize GLUT
  20:      glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);    // Set display mode
  21:      glutInitWindowPosition(50,100);            // Set top-left display window position
  22:      glutInitWindowSize(400, 300);            // set display window width and height
  23:      glutCreateWindow("OpenGL 3D");            // Create display window
  24:   
  25:      Initialize();                    // Execute initialization procedure
  26:      glutDisplayFunc(DrawScene);            // Send graphics to display window
  27:      glutReshapeFunc(myReshape);            // 
  28:      glutKeyboardFunc(myKeyFunc);
  29:      glutSpecialFunc(mySpecFunc);
  30:   
  31:      glutMainLoop();                    // Display everything and wait
  32:  }
  33:   
  34:  void    Initialize(void) {
  35:      glClearColor(0.0, 0.0, 0.0, 0.0);        // Set Display-window color to white
  36:      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  37:      glMatrixMode(GL_PROJECTION);            // Set projection parameters
  38:      glLoadIdentity();
  39:   
  40:      // Set light
  41:      GLfloat ambientLight[]  = {1.0f, 1.0f, 1.0f, 1.0f};
  42:      GLfloat diffuseLight[]  = {1.0f, 0.2f, 1.0f, 1.0f};
  43:      GLfloat specularLight[] = {1.0f, 1.0f, 1.0f, 1.0f};
  44:      GLfloat shininess[]     = {90.0f};
  45:      GLfloat lightPos[]      = {800.0f, 800.0f, 900.0f, 1.0f};
  46:      
  47:      // Setup and enable light 0
  48:  //     glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
  49:  //     glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
  50:  //     glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
  51:   
  52:      glMaterialfv(GL_FRONT, GL_AMBIENT, ambientLight);
  53:      glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseLight);
  54:      glMaterialfv(GL_FRONT, GL_SPECULAR, specularLight);
  55:      glMaterialfv(GL_FRONT, GL_SHININESS, shininess);
  56:      glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
  57:   
  58:      // Enable lighting
  59:      glEnable(GL_LIGHTING);
  60:      glEnable(GL_LIGHT0);
  61:      glDepthFunc(GL_LESS);
  62:      glEnable(GL_DEPTH_TEST);
  63:      
  64:      // Enable color tracking
  65:      glEnable(GL_COLOR_MATERIAL);    
  66:   
  67:      //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
  68:  } // Initialize
  69:   
  70:  void    myReshape(GLsizei w, GLsizei h) {
  71:      // Reset viewport and projection parameter
  72:      glViewport(0, 0, w, h);
  73:      glMatrixMode(GL_PROJECTION);
  74:      glLoadIdentity();
  75:      glOrtho(0, w, 0, h, -500, 500);
  76:      glMatrixMode(GL_MODELVIEW);
  77:  } // myReshape
  78:   
  79:  void    myKeyFunc(GLubyte key, GLint x, GLint y) {
  80:      cout<<key<<x<<y<<endl;
  81:  } // myKeyFunc
  82:   
  83:  void    mySpecFunc(GLint  key, GLint x, GLint y) {
  84:   
  85:      switch(key) {
  86:      case    GLUT_KEY_LEFT:
  87:          leftRight    -=    1;
  88:          break;
  89:   
  90:      case    GLUT_KEY_RIGHT:
  91:          leftRight    +=    1;
  92:          break;
  93:   
  94:      case    GLUT_KEY_UP:
  95:          upDown        -=    1;
  96:          break;
  97:   
  98:      case    GLUT_KEY_DOWN:
  99:          upDown        +=    1;
 100:          break;
 101:   
 102:      default:
 103:          glutPostRedisplay();
 104:      }
 105:   
 106:      glutPostRedisplay();
 107:  } // mySpecFunc
 108:   
 109:  void    DrawScene(void) {
 110:      glClear(GL_COLOR_BUFFER_BIT);            // Clear display window
 111:      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 112:      glEnable(GL_AUTO_NORMAL);
 113:   
 114:      glPushMatrix();
 115:   
 116:      glRotatef((GLfloat)leftRight, 0.0, 1.0, 0.0);
 117:      glRotatef((GLfloat)upDown, 1.0, 0.0, 0.0);
 118:   
 119:      // 
 120:      glTranslatef(50.0, 50.0, 0.0);
 121:      CCordinateAxis  axis;
 122:      axis.SetAxisPosition(0, 0, 0);
 123:      axis.SetAxisSize(100);
 124:      axis.Show();
 125:   
 126:      glTranslatef(100.0f, 100.0f, 100.0f);
 127:      glColor3f(1.0f, 0.8f, 0.0f);
 128:      //glutWireCube(100.0);
 129:      glutSolidTeapot(80);
 130:   
 131:      glPopMatrix();
 132:   
 133:      glFlush();                    // Process all OpenGL routines as quickly possible
 134:  } // DrawScene
   1:  // CordinateAxis.h: interface for the CCordinateAxis class.
   2:  //
   3:  //////////////////////////////////////////////////////////////////////
   4:   
   5:  #ifndef _CORDINATEAXIS_H_
   6:  #define _CORDINATEAXIS_H_
   7:   
   8:  #pragma once
   9:   
  10:  #include <GL/glut.h>
  11:  #include <iostream>
  12:  using namespace std;
  13:   
  14:  class CCordinateAxis  
  15:  {
  16:  public:
  17:      CCordinateAxis();
  18:      CCordinateAxis(double x, double y, double z);
  19:      virtual ~CCordinateAxis();
  20:   
  21:      void    SetAxisPosition(double x, double y, double z);
  22:      void    SetAxisSize(double size);
  23:      void    Show(void);
  24:   
  25:  private:
  26:      double  m_xPos;
  27:      double  m_yPos;
  28:      double  m_zPos;
  29:   
  30:      double  m_Size;
  31:  };
  32:   
  33:  #endif // _CORDINATEAXIS_H_
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

 

   1:  // CordinateAxis.cpp: implementation of the CCordinateAxis class.
   2:  //
   3:  //////////////////////////////////////////////////////////////////////
   4:   
   5:  #include "CordinateAxis.h"
   6:   
   7:  CCordinateAxis::CCordinateAxis()
   8:  {
   9:      m_xPos  = 0;
  10:      m_yPos  = 0;
  11:      m_zPos  = 0;
  12:   
  13:      m_Size  = 80;
  14:  }
  15:   
  16:  CCordinateAxis::CCordinateAxis( double x, double y, double z )
  17:  {
  18:      m_xPos  = x;
  19:      m_yPos  = y;
  20:      m_zPos  = z;
  21:  }
  22:   
  23:  CCordinateAxis::~CCordinateAxis()
  24:  {
  25:   
  26:  }
  27:   
  28:  void CCordinateAxis::SetAxisPosition( double x, double y, double z )
  29:  {
  30:      m_xPos  = x;
  31:      m_yPos  = y;
  32:      m_zPos  = z;
  33:  }
  34:   
  35:  void CCordinateAxis::SetAxisSize( double size )
  36:  {
  37:      m_Size  = size;
  38:  }
  39:   
  40:  void CCordinateAxis::Show( void )
  41:  {
  42:      GLdouble    radius  = m_Size / 12;
  43:      GLdouble    height  = radius * 2.2;
  44:   
  45:      glPushMatrix();
  46:      glTranslatef(m_xPos, m_yPos, m_zPos);
  47:   
  48:      glBegin(GL_LINES);
  49:          glVertex3f(0, 0, 0);
  50:          glVertex3f(m_Size, 0, 0);
  51:   
  52:          glVertex3f(0, 0, 0);
  53:          glVertex3f(0, m_Size, 0);
  54:   
  55:          glVertex3f(0, 0, 0);
  56:          glVertex3f(0, 0, m_Size);
  57:      glEnd();
  58:   
  59:      glutSolidSphere(radius/2, 10, 10);
  60:   
  61:      // x axis arrow
  62:      glTranslatef(m_Size, 0, 0);
  63:      glRotatef(90, 0, 1, 0);
  64:      glColor3f(1, 0, 0);
  65:      glutSolidCone(radius, height, 10, 10);
  66:   
  67:      // y axis arrow
  68:      glTranslatef(0, m_Size, -m_Size);
  69:      glRotatef(-90, 1, 0, 0);
  70:      glColor3f(0, 1, 0);
  71:      glutSolidCone(radius, height, 10, 10);
  72:   
  73:      // z axis arrow
  74:      glTranslatef(-m_Size, 0, -m_Size);
  75:      glRotatef(-90, 0, 1, 0);
  76:      glColor3f(0, 0, 1);
  77:      glutSolidCone(radius, height, 10, 10);
  78:   
  79:      glPopMatrix();
  80:  }
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

 

 

OpenGL 3D

程序效果圖

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清久久久| 在线观看不卡av| 亚洲国产日韩欧美在线99| 午夜精品美女久久久久av福利| 亚洲国产成人av| 欧美一区在线视频| 国产亚洲成av人片在线观看桃| 欧美一区二区三区男人的天堂| 亚洲视频观看| 国产精品日日摸夜夜添夜夜av| 亚洲欧美综合网| 午夜国产精品影院在线观看| 国产午夜精品一区二区三区视频 | 国产精品av一区二区| 一道本一区二区| 亚洲美女黄网| 国产精品久久久久高潮| 欧美在线一级视频| 久久噜噜亚洲综合| 一区二区免费看| 亚洲女爱视频在线| 亚洲成在线观看| av成人免费在线| 国产亚洲精品bv在线观看| 欧美暴力喷水在线| 欧美日韩国产一区| 久久精品国产亚洲一区二区| 久热国产精品| 亚洲欧美高清| 久久女同精品一区二区| 一本色道久久综合亚洲二区三区| 一区二区冒白浆视频| 国产一区在线看| 亚洲精品影院| 国产一区二区精品| 亚洲美女中文字幕| 激情综合亚洲| 亚洲小视频在线| 亚洲国产美女久久久久| 亚洲一区二区免费视频| 亚洲高清免费在线| 亚洲欧美日韩天堂| 9l视频自拍蝌蚪9l视频成人| 午夜视频在线观看一区二区三区| 亚洲理伦在线| 久久一区二区三区国产精品| 亚洲伊人一本大道中文字幕| 乱中年女人伦av一区二区| 性欧美8khd高清极品| 欧美日韩国产成人精品| 美女久久一区| 国产日韩欧美高清| 夜夜爽99久久国产综合精品女不卡| 激情久久五月| 欧美一级黄色录像| 亚洲免费视频在线观看| 欧美激情综合网| 欧美www在线| 激情自拍一区| 午夜精品久久久久影视| 亚洲视频在线观看视频| 欧美成人午夜影院| 欧美jizz19hd性欧美| 国产一区二区日韩精品| 亚洲欧美日韩精品一区二区| 亚洲欧美www| 国产精品高潮呻吟久久av无限| 亚洲国产美女| 91久久久精品| 免费亚洲视频| 欧美国产视频在线观看| 在线成人h网| 蜜臀av性久久久久蜜臀aⅴ| 久久青青草原一区二区| 国产一区二区视频在线观看| 欧美亚洲综合网| 久久九九国产精品怡红院| 国产日产欧产精品推荐色 | 欧美在线视频观看免费网站| 午夜精品av| 国产精品免费久久久久久| 中文亚洲字幕| 先锋影音久久| 国产资源精品在线观看| 久久久久久久91| 欧美激情国产精品| 99re热这里只有精品免费视频| 欧美黄色视屏| 99综合视频| 欧美一区二区三区免费在线看| 国产精品自拍三区| 久久国产乱子精品免费女| 免费观看成人www动漫视频| 亚洲福利专区| 欧美日韩国产成人高清视频| 国产精品99久久久久久www| 午夜精品亚洲一区二区三区嫩草| 国产精品一区二区在线观看网站 | 欧美不卡视频| 一本色道**综合亚洲精品蜜桃冫| 欧美女激情福利| 亚洲午夜一二三区视频| 久久伊人亚洲| 日韩视频在线一区| 国产精品美女主播| 久久夜色精品国产噜噜av| 日韩午夜激情| 久久人人爽人人爽爽久久| 91久久极品少妇xxxxⅹ软件| 欧美午夜电影完整版| 久久精品国产精品 | 亚洲午夜在线观看视频在线| 国产日产欧产精品推荐色 | 国产精品扒开腿做爽爽爽软件| 午夜精品亚洲| 亚洲精品日本| 久久综合99re88久久爱| 日韩亚洲欧美综合| 国产亚洲永久域名| 欧美日韩国产不卡| 久久久国际精品| 一区二区三区|亚洲午夜| 乱码第一页成人| 亚洲欧美日韩综合国产aⅴ| 亚洲国产片色| 黄色国产精品| 国产精品久久久爽爽爽麻豆色哟哟| 久久久欧美一区二区| 亚洲欧美综合国产精品一区| 亚洲精品久久久久中文字幕欢迎你 | 亚洲一区二区三区精品在线| 欧美激情按摩| 久久婷婷国产综合精品青草| 亚洲欧美日韩在线不卡| 亚洲免费观看| 亚洲激情在线观看视频免费| 国产亚洲欧美日韩美女| 国产精品永久免费| 欧美午夜精品久久久久免费视| 欧美91福利在线观看| 久久九九精品99国产精品| 香蕉久久a毛片| 午夜电影亚洲| 亚洲欧美精品suv| 亚洲一级一区| 亚洲网站在线| 在线亚洲精品| 一区二区精品在线| 99精品视频免费观看视频| 亚洲日本中文字幕区| 亚洲国产精品嫩草影院| 欧美激情视频一区二区三区在线播放 | 国产伦精品一区二区三区视频黑人 | 欧美成人免费网| 麻豆成人综合网| 蜜臀99久久精品久久久久久软件| 久久亚洲私人国产精品va| 久久久久久**毛片大全| 久久全国免费视频| 久久一本综合频道| 欧美二区视频| 亚洲人成在线观看| 99精品视频免费观看| 亚洲一区二区成人在线观看| 亚洲一区二区三区在线| 亚洲欧美在线磁力| 久久精品欧美日韩精品| 另类尿喷潮videofree | 一区二区精品| 午夜久久久久久久久久一区二区| 午夜久久福利| 美脚丝袜一区二区三区在线观看 | 亚洲乱码日产精品bd| 亚洲午夜免费视频| 欧美专区日韩专区| 欧美国产日韩精品| 国产精品久久久久aaaa樱花| 国产亚洲精品激情久久| 亚洲高清视频在线观看| 亚洲视频网在线直播| 欧美一区永久视频免费观看| 欧美**人妖| 99亚洲精品| 久久精品日产第一区二区| 欧美高清视频| 国产欧美欧美| 91久久在线观看| 午夜一级在线看亚洲| 欧美aⅴ99久久黑人专区| aa亚洲婷婷| 久久久久久久久久久成人| 欧美日韩亚洲三区| 国产在线精品一区二区中文| 亚洲免费黄色| 久久影院午夜论| 一区二区三区高清不卡| 六月丁香综合| 国产精品免费观看视频| 日韩亚洲精品在线| 麻豆av一区二区三区|