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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。