资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
/ File Name: OpenGLwithCVI.c/ Date: 2001-8-20/ Content:在CVI下使用OpenGL绘制三维物体,并作运动。/ Notes:在项目文件中需要加入两个静态库: glu32.lib 和/ opengl32.lib ,它们位于目录下,/ 还需要添加一个文件 cviogl.fp ,它位于目录下。/ 头文件/#include #include #include #include #include #include #include cviogl.h/ 定义默认值/#define DFLT_VIEW_LATITUDE 45.0#define DFLT_LIGHT_LATITUDE 45.0#define DFLT_VIEW_LONGITUDE 45.0#define DFLT_VIEWPOINT_X 0.0#define DFLT_VIEWPOINT_Y 0.0#define DFLT_VIEWPOINT_Z 0.0#define DFLT_VIEW_DISTANCE 10.0/ 全局变量/int mainPanel;int picCtrl;int quitBtn;int OpenglCtrl;int timerCtrl; unsigned long Time=0; GLUquadricObj *object;/ 偏转角度typedef structdouble RotatX;double RotatY; angle;angle MyAngle;/ 函数原型/int CVICALLBACK Quit( int panelHandle, int controlID,int event, void *callbackData, int eventData1,int eventData2);int CVICALLBACK timerPlot (int panel, int control, int event, void *callbackData, int eventData1, int eventData2);int CVICALLBACK OGLCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);void InitOGLControl(void);void DrawImage(int fastFlag);void RenderImage(int fastFlag);/ 主程序入口点/int main (int argc, char *argv)if (InitCVIRTE (0, argv, 0) = 0) return -1; /* out of memory */ 创建面板mainPanel = NewPanel (0, OpenGL 演示, VAL_AUTO_CENTER, VAL_AUTO_CENTER, 500, 400);/ 添加图形控件picCtrl = NewCtrl (mainPanel, CTRL_PICTURE, , 8, 8); SetCtrlAttribute (mainPanel, picCtrl, ATTR_HEIGHT, 450); SetCtrlAttribute (mainPanel, picCtrl, ATTR_WIDTH, 384);/将图形控件转换为 Ope nGL控件,并添加处理函数OpenglCtrl = OGLConvertCtrl (mainPanel, picCtrl); InstallCtrlCallback (mainPanel, OpenglCtrl, OGLCallback, 0);/ 初始化OpenGL控件InitOGLControl();OGLRefreshGraph (mainPanel, OpenglCtrl);/ 添加退出按钮,并安装其回调函数quitBtn = NewCtrl (mainPanel, CTRL_SQUARE_COMMAND_BUTTON, 退出, 466, 8); InstallCtrlCallback (mainPanel, quitBtn, Quit, 0);/ 添加定时器控件,并安装其回调函数timerCtrl = NewCtrl (mainPanel, CTRL_TIMER, , 466, 8);SetCtrlAttribute (mainPanel, timerCtrl, ATTR_ENABLED, 1);SetCtrlAttribute (mainPanel, timerCtrl, ATTR_INTERVAL, 0.05);InstallCtrlCallback (mainPanel, timerCtrl, timerPlot, 0);/ 显示主面板DisplayPanel (mainPanel);/ 进入 UI 循环RunUserInterface ();/ 退出的清理工作OGLDiscardCtrl (mainPanel, OpenglCtrl);DiscardPanel (mainPanel);return 0;/ Quit() :退出函数/int CVICALLBACK Quit( int panelHandle, int controlID,int event, void *callbackData, int eventData1,int eventData2)switch (event)case EVENT_COMMIT:QuitUserInterface (0);break;return 0;/InitOGLControl():初始化 OpenGL控件/void InitOGLControl(void)/ 设置系统光照属性 OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_LIGHTING_ENABLE, 1);OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_LIGHT_SELECT, 1);OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_LIGHT_ENABLE, 1);OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_LIGHT_DISTANCE, 2.0);OGLSetCtrlAttribute (mainPanel, OpenglCtrl,OGLATTR_LIGHT_LATITUDE, DFLT_LIGHT_LATITUDE);/ 设置视点位置(mainPanel,OpenglCtrl,OGLATTR_PROJECTION_TYPE,OGLSetCtrlAttributeOGLVAL_ORTHOGRAPHIC);OGLSetCtrlAttribute (mainPanel,OpenglCtrl,OGLATTR_ENABLE_PAN_ZOOM_ROTATE, 1);OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_VIEW_DIRECTION,OGLVAL_USER_DEFINED);OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_VIEW_LATITUDE,DFLT_VIEW_LATITUDE);OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_VIEW_LONGITUDE,DFLT_VIEW_LONGITUDE);OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_VIEW_CENTERX,DFLT_VIEWPOINT_X);OGLSetCtrlAttribute (mainPanel,OpenglCtrl,OGLATTR_VIEW_CENTERY,DFLT_VIEWPOINT_Y); OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_VIEW_CENTERZ,DFLT_VIEWPOINT_Z); OGLSetCtrlAttribute(mainPanel,OpenglCtrl,OGLATTR_VIEW_DISTANCE,DFLT_VIEW_DISTANCE);/ 屏蔽 cviogl.fp 的 3D 绘图属性OGLSetCtrlAttribute (mainPanel, OpenglCtrl, OGLATTR_PLOTTING_ENABLE, OGLVAL_FALSE);OGLSetCtrlAttribute (mainPanel, OpenglCtrl, OGLATTR_ENABLE_PROPERTY_POPUP, OGLVAL_FALSE);/ RenderImage():纹理设置/void RenderImage(int fastFlag)GLfloat specularLight0 =1.0f, 1.0f, 1.0f, 1.0f; glPushAttrib(GL_ALL_ATTRIB_BITS); glMatrixMode(GL_PROJECTION);glPushMatrix();glMatrixMode(GL_MODELVIEW);glPushMatrix();glEnable(GL_DEPTH_TEST);glShadeModel(GL_SMOOTH);glEnable(GL_COLOR_MATERIAL);glEnable(GL_BLEND);glEnable(GL_LINE_SMOOTH); glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularLight0); glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 128);DrawImage(fastFlag);glPopMatrix();glMatrixMode(GL_PROJECTION);glPopMatrix();glPopAttrib();glFlush();/ DrawImage():绘图/void DrawImage(int fastFlag)object = gluNewQuadric();glPushMatrix();glRotatef(MyAngle.RotatX,0.0,0.0,1.0); /
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号