位置: 编程技术 - 正文

VS2012下基于Glut OpenGL显示一些立体图形示例程序(vs2019怎么用gets)

编辑:rootadmin
转自: Glut下提供了一些现成的绘制立体的API,如glutWireSphere绘制球,glutWireCone绘制椎体,glutWireCube绘制立体,glutWireTorus绘制甜圈,glutWireTeapot绘制茶壶,glutWireOctahedron绘制八面体。

推荐整理分享VS2012下基于Glut OpenGL显示一些立体图形示例程序(vs2019怎么用gets),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vs2012教程,vs配置glut库,vs2012 key,vs2012怎么配置gl glut.h,vs2012怎么配置gl glut.h,vs2010nuget,vs2012教程,vs配置glut库,内容如对您有帮助,希望把文章链接给更多的朋友!

Demo程序利用这些API绘制相应的立体,单击鼠标右键在弹出的菜单里可以选择需要绘制的立体以及是wire还是solid填充的,按键盘的UP、DOWN、LEFT、RIGHT按键可以旋转坐标系。由于Glut提供的多面体API默认半径是1.0f的,我使用glScalef对其进行了放大。示例效果如下:

VS2012下基于Glut OpenGL显示一些立体图形示例程序(vs2019怎么用gets)

源代码:

[cpp] view plaincopy// GlutDemo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <gl/glut.h> #include <math.h> //圆周率宏 #define GL_PI 3.f //获取屏幕的宽度 GLint SCREEN_WIDTH=0; GLint SCREEN_HEIGHT=0; //设置程序的窗口大小 GLint windowWidth=; GLint windowHeight=; //绕x轴旋转角度 GLfloat xRotAngle=0.0f; //绕y轴旋转角度 GLfloat yRotAngle=0.0f; //受支持的点大小范围 GLfloat sizes[2]; //受支持的点大小增量 GLfloat step; enum MODELS{ SPHERE=0, CONE, CUBE, TORUS, DODECAHEDRON, TEAPOT, OCTAHEDRON, TETRAHEDRON, ICOSAHEDRON }; GLint iModel=SPHERE; GLboolean bWire=GL_TRUE; //菜单回调函数 void processMenu(int value){ switch(value){ case 1: iModel=SPHERE; break; case 2: iModel=CONE; break; case 3: iModel=CUBE; break; case 4: iModel=TORUS; break; case 5: iModel=DODECAHEDRON; break; case 6: iModel=TEAPOT; break; case 7: iModel=OCTAHEDRON; break; case 8: iModel=TETRAHEDRON; break; case 9: iModel=ICOSAHEDRON; break; case : bWire=GL_TRUE; break; case : bWire=GL_FALSE; break; default: break; } //重新绘制 glutPostRedisplay(); } //显示回调函数 void renderScreen(void){ //将窗口颜色清理为黑色 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //将模板缓冲区&#;全部清理为1 glClearStencil(1); //使能模板缓冲区 glEnable(GL_STENCIL_TEST); //把整个窗口清理为当前清理颜色:黑色。清除深度缓冲区、模板缓冲区 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); //将当前Matrix状态入栈 glPushMatrix(); //坐标系绕x轴旋转xRotAngle glRotatef(xRotAngle,1.0f,0.0f,0.0f); //坐标系绕y轴旋转yRotAngle glRotatef(yRotAngle,0.0f,1.0f,0.0f); //进行平滑处理  glEnable(GL_POINT_SMOOTH); glHint(GL_POINT_SMOOTH,GL_NICEST); glEnable(GL_LINE_SMOOTH); glHint(GL_LINE_SMOOTH,GL_NICEST); glEnable(GL_POLYGON_SMOOTH); glHint(GL_POLYGON_SMOOTH,GL_NICEST); //白色绘制坐标系 glColor3f(1.0f,1.0f,1.0f); glBegin(GL_LINES); glVertex3f(-9.0f,0.0f,0.0f); glVertex3f(9.0f,0.0f,0.0f); glVertex3f(0.0f,-9.0f,0.0f); glVertex3f(0.0f,9.0f,0.0f); glVertex3f(0.0f,0.0f,-9.0f); glVertex3f(0.0f,0.0f,9.0f); glEnd(); glPushMatrix(); glTranslatef(9.0f,0.0f,0.0f); glRotatef(.0f,0.0f,1.0f,0.0f); glutSolidCone(0.3,0.6,,); glPopMatrix(); glPushMatrix(); glTranslatef(0.0f,9.0f,0.0f); glRotatef(-.0f,1.0f,0.0f,0.0f); glutSolidCone(0.3,0.6,,); glPopMatrix(); glPushMatrix(); glTranslatef(0.0f,0.0f,9.0f); glRotatef(.0f,0.0f,0.0f,1.0f); glutSolidCone(0.3,0.6,,); glPopMatrix(); //设置绘画颜色为金色 glColor3f(0.0f,1.0f,0.0f); switch(iModel){ //球 case SPHERE: if(bWire){ glutWireSphere(8.0f,,); } else{ glutSolidSphere(8.0f,,); } break; //锥体 case CONE: if(bWire){ glutWireCone(4.0f,8.0f,,); } else{ glutSolidCone(4.0f,8.0f,,); } break; //立体 case CUBE: if(bWire){ glutWireCube(8.0f); } else{ glutSolidCube(8.0f); } break; //甜圈 case TORUS: if(bWire){ glutWireTorus(3.0f,6.0f,,); } else{ glutSolidTorus(3.0f,6.0f,,); } break; //十六面体,默认半径1.0 case DODECAHEDRON: glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍 if(bWire){ glutWireDodecahedron(); } else{ glutSolidDodecahedron(); } break; //茶壶 case TEAPOT: if(bWire){ glutWireTeapot(8.0f); } else{ glutSolidTeapot(8.0f); } break; //八面体,默认半径1.0 case OCTAHEDRON: glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍 if(bWire){ glutWireOctahedron(); } else{ glutSolidOctahedron(); } break; //四面体,默认半径1.0 case TETRAHEDRON: glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍 if(bWire){ glutWireTetrahedron(); } else{ glutSolidTetrahedron(); } break; //二十面体,默认半径1.0 case ICOSAHEDRON: glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍 if(bWire){ glutWireIcosahedron(); } else{ glutSolidIcosahedron(); } break; default: break; } //恢复压入栈的Matrix glPopMatrix(); //交换两个缓冲区的指针 glutSwapBuffers(); } //设置Redering State void setupRederingState(void){ //设置清理颜色为黑色 glClearColor(0.0f,0.0,0.0,1.0f); //设置绘画颜色为绿色 glColor3f(1.0f,1.0f,0.0f); //使能深度测试 glEnable(GL_DEPTH_TEST); //获取受支持的点大小范围 glGetFloatv(GL_POINT_SIZE_RANGE,sizes); //获取受支持的点大小增量 glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step); printf("point size range:%f-%fn",sizes[0],sizes[1]); printf("point step:%fn",step); } //窗口大小变化回调函数 void changSize(GLint w,GLint h){ //横宽比率 GLfloat ratio; //设置坐标系为x(-.0f,.0f)、y(-.0f,.0f)、z(-.0f,.0f) GLfloat coordinatesize=.0f; //窗口宽高为零直接返回 if((w==0)||(h==0)) return; //设置视口和窗口大小一致 glViewport(0,0,w,h); //对投影矩阵应用随后的矩阵操作 glMatrixMode(GL_PROJECTION); //重置当前指定的矩阵为单位矩阵  glLoadIdentity(); ratio=(GLfloat)w/(GLfloat)h; //正交投影 if(w<h) glOrtho(-coordinatesize,coordinatesize,-coordinatesize/ratio,coordinatesize/ratio,-coordinatesize,coordinatesize); else glOrtho(-coordinatesize*ratio,coordinatesize*ratio,-coordinatesize,coordinatesize,-coordinatesize,coordinatesize); //对模型视图矩阵堆栈应用随后的矩阵操作 glMatrixMode(GL_MODELVIEW); //重置当前指定的矩阵为单位矩阵  glLoadIdentity(); } //按键输入处理回调函数 void specialKey(int key,int x,int y){ if(key==GLUT_KEY_UP){ xRotAngle-=5.0f; } else if(key==GLUT_KEY_DOWN){ xRotAngle&#;=5.0f; } else if(key==GLUT_KEY_LEFT){ yRotAngle-=5.0f; } else if(key==GLUT_KEY_RIGHT){ yRotAngle&#;=5.0f; } //重新绘制 glutPostRedisplay(); } int main(int argc, char* argv[]) { int nModelMenu; int nWireMenu; int nMainMenu; //初始化glut glutInit(&argc,argv); //使用双缓冲区、深度缓冲区、模板缓冲区 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL); //获取系统的宽像素 SCREEN_WIDTH=glutGet(GLUT_SCREEN_WIDTH); //获取系统的高像素 SCREEN_HEIGHT=glutGet(GLUT_SCREEN_HEIGHT); //创建窗口,窗口名字为OpenGL Glut Demo glutCreateWindow("OpenGL Glut Demo"); //设置窗口大小 glutReshapeWindow(windowWidth,windowHeight); //窗口居中显示 glutPositionWindow((SCREEN_WIDTH-windowWidth)/2,(SCREEN_HEIGHT-windowHeight)/2); //创建二级菜单 nModelMenu=glutCreateMenu(processMenu); glutAddMenuEntry("Sphere",1); glutAddMenuEntry("Cone",2); glutAddMenuEntry("Cube",3); glutAddMenuEntry("Torus",4); glutAddMenuEntry("Dodecahedron",5); glutAddMenuEntry("Teapot",6); glutAddMenuEntry("Octahedron",7); glutAddMenuEntry("Tetrahedron",8); glutAddMenuEntry("Icosahedron",9); nWireMenu=glutCreateMenu(processMenu); glutAddMenuEntry("Wire",); glutAddMenuEntry("Solid",); nMainMenu=glutCreateMenu(processMenu); glutAddSubMenu("Model",nModelMenu); glutAddSubMenu("WireOrSolid",nWireMenu); //将菜单榜定到鼠标右键上 glutAttachMenu(GLUT_RIGHT_BUTTON); //窗口大小变化时的处理函数 glutReshapeFunc(changSize); //设置显示回调函数 glutDisplayFunc(renderScreen); //设置按键输入处理回调函数 glutSpecialFunc(specialKey); //设置全局渲染参数 setupRederingState(); glutMainLoop(); return 0; }

[置顶] Bezier曲线的动态绘制 #includegl/glut.h#includemath.h#pragmacomment(linker,/subsystem:windows/entry:mainCRTStartup)intSCREEN_HEIGHT=;intNUMPOINTS=0;classPoint{public:floatx,y;voidsetxy(floatx2,floaty2){x=x2;y=y2;}};

glutSwapBuffers函数用法 文章来源:

三 OpenGL常见平面图形绘制代码 //代码模板#includeglut.hvoiddisplayFunc(){glClearColor(0.0f,0.0f,0.0f,0.0f);//在RGB模式下,使用glClearColor清空之后画布的颜色glClear(GL_COLOR_BUFFER_BIT);//清空画布glColor3f(1.

标签: vs2019怎么用gets

本文链接地址:https://www.jiuchutong.com/biancheng/369576.html 转载请保留说明!

上一篇:Android OpenGL ES绘图教程之六 :响应触摸事件(opengl es api)

下一篇:[置顶] Bezier曲线的动态绘制([置顶]bilinovel)

  • 房地产销售商品房税率
  • 税务师厉害吗
  • 正常工资薪金所得是什么意思
  • 视同内销补税的财务处理
  • 外经证的项目范围
  • 债权投资损失准备
  • 委托加工的材料计入什么科目
  • 划拨土地使用权多少年
  • 净水设备配件计算方法
  • 会务费发票税率是
  • 购车合同起什么作用
  • 物流公司开票税率
  • 税字号是不是纳税人识别号
  • 代开专票怎么做账?
  • 总公司签合同发票可以给子公司吗
  • 土地闲置费能否扣除
  • 十分钟看懂财务报表
  • 公积金是否计入个人所得税
  • 企业微信收入也要交税吗
  • 企业所得税分期收款确认收入的时间政策
  • 个人独资企业对公账户转个人账户
  • 基金投资于什么
  • PHP:preg_match_all()的用法_PCRE正则函数
  • 若依框架介绍
  • 本单位生产的水泥属于
  • php编程中的_横线表示什么
  • laravel使用
  • 没有审计报告的情况说明
  • 物业公司购买空调合法吗
  • php提交表单数据有哪几种方法
  • 清除命令窗口所有内容用()命令,清除变量用()命令
  • 纳税人填写纳税申报表
  • 公司当月没有人发工资
  • vue移动组件
  • python报错怎么办
  • 年终奖怎么计算个税
  • 不动产用于集体福利进项税额抵扣吗
  • 注册子公司需要的材料
  • 企业增值税抵扣包括哪些内容
  • 房地产企业销售房屋印花税税率
  • 企业对外借款计入什么科目
  • 外币账户的钱怎么转成人民币
  • 2019员工旅游费最新规定
  • 待摊费用取消了怎么做账
  • 外汇申报填写什么最简单
  • 工程上第三方代表啥意思
  • 金税盘可以申请发票吗
  • 卖掉公司旧办公用品怎么入账
  • 小规模纳税人公户转私户可以吗
  • 成本暂估入帐如何做分录
  • 资产质量的相对性举例说明
  • sql server创建架构
  • mysql中数据类型为是否
  • 2008sql附加数据库
  • 445端口 关闭
  • xp无法正常启动怎么办
  • windows下部署phpipam
  • 在windowsxp的应用程序中,经常有一些菜单选项呈暗灰色
  • tracert命令的功能和用法
  • win7系统连接无线鼠标
  • linux如何快速入门
  • 微软发布ChatGPT功能
  • 教你怎样用竹子搭棚子
  • excel的exceladdinrd加载项出现问题
  • Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
  • js 图片压缩库
  • python解读
  • unity怎么设置多个关卡
  • shell删除指定内容
  • js选中div
  • Jquery和BigFileUpload实现大文件上传及进度条显示
  • java中线程池原理
  • 湖南省电子税务局登录
  • 如何查询税务是否签订三方
  • 广州地税官网
  • 契税怎样才能抵扣个税
  • 中国农村信用社手机银行下载app
  • 江苏灵活就业医保交多少年
  • 怎样在开票系统中增加新的名称
  • 合肥高新公共事务管理有限公司
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设