位置: 编程技术 - 正文

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)

  • 证券交易印花税税率是多少
  • 银行开户手续费怎么开发票
  • 所得税多交怎么调整
  • 装修公司一般纳税人税率是多少啊
  • 工程材料增值税税率2023年
  • 分公司独立核算和非独立核算区别
  • 发票报销的条件是什么?
  • 技术服务年费是什么
  • 物业前期介入费用测算
  • 小规模公司没有进项票 开票需要交什么税
  • 发票的受票方是什么
  • 免税和不征税货一样吗
  • 计提城市建设维护税
  • 非公司私营企业属于什么类型
  • 临时建筑进项税可以一次抵扣吗?
  • 个体工商户开服务类型发票怎么开的
  • 没有预付账款科目计入哪里
  • 个人租赁汽车给公司怎么开发票
  • 生物制品的生产过程及设备
  • win10玩红警卡顿怎么解决
  • 预付会议费会计分录
  • 查补以前年度房产税的账务处理
  • 怎么进入bios设置界面设置内存
  • 前端vue实现预览excel
  • 个人所得税专项扣除子女教育标准
  • 魁北克位置地图
  • 企业职工工伤赔偿标准
  • svchost很多进程
  • PHP:imagetruecolortopalette()的用法_GD库图像处理函数
  • PHP:imagecolordeallocate()的用法_GD库图像处理函数
  • 生产企业外销收入账务处理
  • phpopendir
  • 制造业预提短期利润
  • 若依框架前端如何通过后端加载页面
  • Thinkphp和onethink实现微信支付插件
  • 详解Yii2.0 rules验证规则集合
  • 做了几年前端基础还是很差
  • 销售服饰
  • java基础运算符有哪些
  • 香港公司代收国际汇款税务怎么处理
  • 如何去掉或修改文件夹
  • mongodb怎么用
  • access 200
  • mysql编程一般步骤
  • 以土地作价投资合伙企业是否缴纳土地增值税
  • 表彰奖励奖金规定
  • 政府补贴资金如何记账
  • 已计提教育费附加但是未扣除个税
  • 现金日记账如何填写
  • 为什么贷款要收手续费
  • 外商投资企业开什么发票
  • sql中的coalesce
  • mysql子查询嵌套查询
  • win10新预览版
  • 电脑收藏夹文件恢复
  • 轻松玩转职场职场沟通与写作技巧答案
  • Windows 2003 SP2 简体中文版下载地址
  • thinkpad e431 bios怎么进入
  • win7删除搜索历史记录
  • xp系统java环境变量配置
  • Ubuntu 14.10 “Utopic Unicorn”正式发布(附下载)
  • .ctc文件
  • win10rs2是哪个版本
  • centos6.6
  • win10 ie浏览器双击没有反应
  • windows8.
  • 如何解决win7系统不稳定
  • vue 父子组件通信
  • 怎么看判断
  • unity技术分享
  • html如何用css
  • nodejs bull
  • shell编程教程
  • jquery iframe src
  • js复制div
  • python whiletrue循环语句
  • 进项转出怎么做
  • 四川省地税局地址
  • 公司自有房屋装修费用入什么料目
  • 合伙企业如何申报税务报表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设