opengl库函数,opengl控件库

  opengl库函数,opengl控件库

  6)空闲事件处理功能

  下面设计的程序,尽可能的涵盖了辅助库的所有功能。程序的作用是定义键盘的功能,0~9和A分别代表11种基本类型的选择。

  一种绘画形式;鼠标的功能定义为:左键选择实体显示方式,右键选择网格显示方式;空闲事件的函数定义

  用于:反复放大或缩小形状。除了颜色索引加载功能,所有列出的功能都在程序中使用。

  代码如下:

  #包括iostream

  #include Windows.h //以便在编译时通过下面的头文件

  #include gl\GLU.h

  #包含总帐\总帐. h

  #包含gl\GLAUX。H

  使用命名空间std

  void MyInit(void);

  void DrawScene(int,int);

  void回调显示(void);

  void回调MyReshape(GLsizei w,GL sizei h);

  void回调set solid(AUX _ event rec *);

  void回调set wire(AUX _ event rec *);

  void回调set scale();

  void回调Key _ 0(void);

  void回调Key _ 1(void);

  void回调Key _ 2(void);

  void回调Key _ 3(void);

  void回调Key _ 4(void);

  void回调Key _ 5(void);

  void回调Key _ 6(void);

  void回调Key _ 7(void);

  void回调Key _ 8(void);

  void回调Key _ 9(void);

  void回调Key _ a(void);

  /*全局变量*/

  闪烁宽度=0;//窗口宽度

  闪烁高度=0;//窗口高度

  闪烁形状类型,实心=1;//形状类型以及是否是实心的

  GLfloat Scale=1.0f//形状缩放比例

  /*初始化函数:定义材质和照明*/

  void MyInit(void)

  GLfloat diffuse[]={0.3f,0.6f,0.9f,1.0f };

  GLfloat specular[]={0.8f,0.8f,0.8f,1.0f };

  GLfloat position_one[]={1.0f,1.0f,1.0f,0.0f };

  GLfloat position_two[]={-1.0f,1.0f,1.0f,0.0f };

  //定义材料

  glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,DIFFUSE);

  glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,SPECULAR);

  glMaterialf(GL_FRONT_AND_BACK,GL _ SHININESS,64.0 f);

  //定义凌t0,凌t1

  glLightfv(GL_LIGHT0,GL_DIFFUSE,DIFFUSE);

  glLightfv(GL_LIGHT0,GL_SPECULAR,SPECULAR);

  glLightfv(GL_LIGHT0,GL_POSITION,POSITION _ one);

  glLightfv(GL_LIGHT1,GL_POSITION,POSITION _ two);

  //使用双面照明

  glLightModeli(GL _ LIGHT _ MODEL _ TWO _ SIDE,GL _ TRUE);

  //激活照明和深度检测

  glen able(GL _ light 0);

  glen able(GL _ light 1);

  glen able(GL _ LIGHTING);

  glen able(GL _ DEPTH _ TEST);

  显示相应的函数:调用集合形状绘制,程序会循环调用这个函数进行绘制。

  因此,当下面的绘图程序中的某些参数在其他程序中被修改时,就不需要调用这个函数了。

  程序会用这个函数自动重画。

  在以下过程中,首先指定视口,清除缓存,并在一系列坐标转换后,绘制集合主体。

  然后前后缓存互换,屏幕上显示绘制的内容。

  无效回叫显示(无效)

  glViewport(0,9,宽度,高度);

  GL clear(GL _ COLOR _ BUFFER _ BIT GL _ DEPTH _ BUFFER _ BIT);

  glPushMatrix();

  glRotatef(30.0f,1.0f,0.0f,0.0f);

  glRotatef(30.0f,0.0f,1.0f,0.0f);

  glScalef(标度,标度,标度);

  DrawScene(ShapeType,Solid);

  GL flush();

  glPopMatrix();

  auxSwapBuffers();

  /*当窗口大小改变时,相应地调整坐标系*/

  void回调MyReshape(GLsizei w,GLsizei h)

  宽度=w;

  高度=h;

  如果(w=h)

  glOrtho(-2.0f,2.0f,-2.0f * (GLfloat)h/(GLfloat)w,2.0f * (GLfloat)h/(GLfloat)w,-2.0f,2.0f);

  其他

  glOrtho(-2.0f * (GLfloat)w/(GLfloat)h,2.0f *(GL float)w/(GL float)h,-2.0f,2.0f,-2.0f,2.0f);

  glMatrixMode(GL _ model view);

  glload identity();

  场景渲染功能

  该函数绘制辅助库中的所有基本几何图形。ShapeType参数确定要绘制的形状,

  Solid参数决定是否绘制实体。这里调用的是提供当前辅助库中所有形状的函数。严谨的

  用户可能会发现,在程序运行结果中可能会遇到辅助库中的一个小错误,即在绘制圆柱和圆锥时,

  从实体到网格或从网格圆柱体或圆锥体,实体和网格圆柱体或圆锥体不能显示在同一个框架中。

  辅助库并不常用,因此并不必担心,不过还是希望OpenGL(OpenGL)的下一个版本中能改掉这个小错误。

  请参见绘图场景

  开关(形状类型)

  案例0:

  如果(实体)

  au x solid sphere(1.0);

  其他语句

  au xwire sphere(1.0);

  打断;打断;

  案例1:

  如果(实体)

  au xsolidcube(1.0);

  其他语句

  au xwire cube(1.0);

  打断;打断;

  案例2:

  如果(实体)

  auxSolidBox(1.5、1.0、1.0);

  其他语句

  auxWireBox(1.5、1.0、1.0);

  打断;打断;

  案例3:

  如果(实体)

  auxSolidTorus(1.0,1.0);

  其他语句

  auxWireTorus(1.0,1.0);

  打断;打断;

  案例4:

  如果(实体)

  auxsolidccylinder(1.0,2.0);

  其他语句

  auxWireCylinder(1.0,2.0);

  打断;打断;

  案例5:

  如果(实体)

  au xsoliosahedron(1.0);

  其他语句

  auxwireico sahadedron(1.0);

  打断;打断;

  案例6:

  如果(实体)

  au八面体(1.0);

  其他语句

  auxwire八面体(1.0);

  打断;打断;

  案例7:

  如果(实体)

  au xsolidttrahedron(1.0);

  其他语句

  auxwirethedron(1.0);

  打断;打断;

  案例8:

  如果(实体)

  au xsoliddocahedron(1.0);

  其他语句

  auxwiredodehedron(1.0);

  打断;打断;

  案例9:

  如果(实体)

  auxSolidCone(1.0,1.0);

  其他语句

  auxWireCone(1.0,1.0);

  打断;打断;

  案例10:

  如果(实体)

  au xsolidtapot(1.0);

  其他语句

  au xwire茶壶(1.0);

  打断;打断;

  鼠标事件处理函数

  鼠标时间处理函数定义得非常简单,单机

  请参见SetSolid回调(AUX_EVENTREC *)

  实心=1;

  请参见SetWire回调(AUX_EVENTREC *)

  实体=0;

  空闲时间处理函数:

  空闲时间处理函数的功能为:先对所绘制的形体进行缩小,当缩小到一定程度(此处为0.1版倍原大小)后,

  再对形体进行放大,当放大到一定程度(此处为原大小)后,又开始进行缩小,如此反复。程序中使用了

  一个静态变量来表示放大缩小的状态。

  请参阅设置模型等比缩放比例回调()

  静态int ZoomIn=0:

  如果(缩放比例1.0f)

  标度=标度* 1.1f

  如果(比例=1.0f)

  ZoomIn=0:

  其他语句

  比例=比例/1.1f;

  如果(比例=0.1f)

  ZoomIn=1:

  显示();

  键盘事件处理函数

  每一个案件选择一种形体类型,由于程序中定义了控制场景绘制的主循环函数,因此在选择一种形体

  类型之后,无需调用场景绘制函数,程序认可根据选择的形体进行绘制。键盘事件处理函数也必须是

  回调函数,参数为你看

  请参阅回调Key_0(请参阅)

  ShapeType=0:

  请参阅回调Key_1(请参阅)

  ShapeType=1:

  请参阅回调Key_2(请参阅)

  ShapeType=2:

  请参阅回调Key_3(请参阅)

  ShapeType=3:

  请参见关键_4回调(请参见)

  ShapeType=4:

  请参阅回调Key_5(请参阅)

  ShapeType=5:

  请参阅回调Key_6(请参阅)

  ShapeType=6:

  请参见关键_7回调(请参见)

  ShapeType=7:

  请参见关键_8回调(请参见)

  ShapeType=8:

  请参阅回调Key_9(请参阅)

  ShapeType=9:

  请参阅回调Key_a(请参阅)

  ShapeType=10:

  《成功》终篇;

  auxinitisplaymode(aux _ double aux _ RGB aux _ depth 16 aux _ stencil):

  新位置(0,0,400,400);

  auxinitwindow(lpcwstr( aux lib demo );

  MyInit():

  au xmouefnc(au _ leftbutton、aux _ mousedown、set solid);

  au xmouefnc(aux _ right按钮、aux _ mousedown、SetWire):

  //auxilive func(设置小数位数);//设置为空闲的事件,所以会在无操作一直执行

  au xkey func(au _ space,set scale);

  au xkey func(au _ 0,Key_0):

  au xkey func(au _ 1,Key_1):

  au xkey func(au _ 2,Key_2):

  au xkey func(au _ 3,Key_3):

  au xkey func(au _ 4,Key_4):

  au xkey func(au _ 5,Key_5):

  au xkey func(au _ 6,Key_6):

  S7-1200可编程控制器:

  S7-1200可编程控制器:

  au xkey func(au _ 9,Key_9):

  au xkey func(au _ a,Key_a):

  auxrshape func(my resape);

  辅助循环(显示):

  返回0;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: