位置: 编程技术 - 正文

OpenGL 超级宝典学习,制作 圆柱,球体,花托,圆盘等多边体(opengl超级宝典pdf)

编辑:rootadmin
#include <GLTools.h>#include <GLMatrixStack.h>#include <GLFrame.h>#include <GLFrustum.h>#include <GLBatch.h>#include <GLGeometryTransform.h>#include <math.h>#ifdef __APPLE__#include <glut/glut.h>#else#define FREEGLUT_STATIC#include <gl/glut.h>#endifGLShaderManager shaderManager; //着色管理器GLMatrixStack modelViewMatrix;GLMatrixStack projectionMatrix;GLFrame cameraFrame;GLFrame objectFrame;GLFrustum viewFrustum;GLTriangleBatch sphereBatch;GLTriangleBatch torusBatch;GLTriangleBatch cylinderBatch;GLTriangleBatch coneBatch;GLTriangleBatch diskBatch;GLGeometryTransform transformPipeline;M3DMatrixf shadowMatrix;GLfloat vGreen[] = { 0.0f, 1.0f, 0.0f, 1.0f };GLfloat vBlack[] = { 0.0f, 0.0f, 0.0f, 1.0f };int nStep = 0;void SetupRC(){glClearColor(0.7f, 0.7f, 0.7f, 1.0f);shaderManager.InitializeStockShaders(); 初始化glEnable(GL_DEPTH_TEST); // 开启深度测试transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix);cameraFrame.MoveForward(-.0f);gltMakeSphere(sphereBatch, 3.0, , );// 球体gltMakeTorus(torusBatch, 3.0f, 0.f, , ); // 花托gltMakeCylinder(cylinderBatch, 2.0f, 2.0f, 3.0f, , 2);//圆柱gltMakeCylinder(coneBatch, 2.0f, 0.0f, 3.0f, , 2);gltMakeDisk(diskBatch, 1.5f, 3.0f, , 3);//圆盘}void DrawWireFramedBatch(GLTriangleBatch* pBatch){shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), vGreen);pBatch->Draw();// Draw black outlineglPolygonOffset(-1.0f, -1.0f);glEnable(GL_LINE_SMOOTH);glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glEnable(GL_POLYGON_OFFSET_LINE);glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glLineWidth(2.5f);shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), vBlack);pBatch->Draw();// Restore polygon mode and depht testingglPolygonMode(GL_FRONT, GL_FILL);glDisable(GL_POLYGON_OFFSET_LINE);glLineWidth(1.0f);glDisable(GL_BLEND);glDisable(GL_LINE_SMOOTH);}void RenderScene(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);modelViewMatrix.PushMatrix();M3DMatrixf mCamara;cameraFrame.GetCameraMatrix(mCamara);modelViewMatrix.MultMatrix(mCamara);M3DMatrixf mObjectFrame;objectFrame.GetMatrix(mObjectFrame);modelViewMatrix.MultMatrix(mObjectFrame);shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), vBlack);switch (nStep) {case 0:DrawWireFramedBatch(&sphereBatch);break;case 1:DrawWireFramedBatch(&torusBatch);break;case 2:DrawWireFramedBatch(&cylinderBatch);break;case 3:DrawWireFramedBatch(&coneBatch);break;case 4:DrawWireFramedBatch(&diskBatch);break;}modelViewMatrix.PopMatrix();// Flush drawing commandsglutSwapBuffers();}// Respond to arrow keys by moving the camera frame of referencevoid SpecialKeys(int key, int x, int y){if (key == GLUT_KEY_UP)objectFrame.RotateWorld(m3dDegToRad(-5.0f), 1.0f, 0.0f, 0.0f);if (key == GLUT_KEY_DOWN)objectFrame.RotateWorld(m3dDegToRad(5.0f), 1.0f, 0.0f, 0.0f);if (key == GLUT_KEY_LEFT)objectFrame.RotateWorld(m3dDegToRad(-5.0f), 0.0f, 1.0f, 0.0f);if (key == GLUT_KEY_RIGHT)objectFrame.RotateWorld(m3dDegToRad(5.0f), 0.0f, 1.0f, 0.0f);glutPostRedisplay();}void KeyPressFunc(unsigned char key, int x, int y){if (key == ){nStep&#;&#;;if (nStep > 4)nStep = 0;}switch (nStep){case 0:glutSetWindowTitle("Sphere");break;case 1:glutSetWindowTitle("Torus");break;case 2:glutSetWindowTitle("Cylinder");break;case 3:glutSetWindowTitle("Cone");break;case 4:glutSetWindowTitle("Disk");break;}glutPostRedisplay();}void ChangeSize(int w, int h){glViewport(0, 0, w, h);viewFrustum.SetPerspective(.0f, float(w) / float(h), 1.0f, .0f);projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());modelViewMatrix.LoadIdentity();}int main(int argc, char* argv[]){gltSetWorkingDirectory(argv[0]);glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);glutInitWindowSize(, );glutCreateWindow("Sphere");glutReshapeFunc(ChangeSize);glutKeyboardFunc(KeyPressFunc);glutSpecialFunc(SpecialKeys);glutDisplayFunc(RenderScene);GLenum err = glewInit();if (GLEW_OK != err) {fprintf(stderr, "GLEW Error: %sn", glewGetErrorString(err));return 1;}SetupRC();glutMainLoop();return 0;}

推荐整理分享OpenGL 超级宝典学习,制作 圆柱,球体,花托,圆盘等多边体(opengl超级宝典pdf),希望有所帮助,仅作参考,欢迎阅读内容。

OpenGL 超级宝典学习,制作 圆柱,球体,花托,圆盘等多边体(opengl超级宝典pdf)

文章相关热门搜索词:opengl超级宝典第八版,opengl 超级宝典 编程指南,opengl超级宝典pdf 第七版百度云,opengl 超级宝典 第七版 pdf,opengl超级宝典pdf,opengl 超级宝典 编程指南,opengl超级宝典pdf,opengl超级宝典第七版,内容如对您有帮助,希望把文章链接给更多的朋友!

用球体模拟天空 之前说到可以用球体作为SkyDome模拟天空,那么就来说一说其中的细节.SkyDome就是天空穹顶,是一种在三维场景中模拟天空的方法,用SkyDome模拟的天空较SkyBox

如何向GLSL中传入多个纹理 如何向GLSL中传入多个纹理这几天在研究如何实现用GLSL对多个纹理进行融合处理,发现除了第一个纹理之外其它的纹理参数都无法传递到GLSL中去,在网

使用着色器模拟雾效果 上一篇关于天空盒的blog谈到了雾效果,那么这次来讨论一下用着色器实现雾效果的具体实现方法.雾在大自然中是一种常见的天气现象,比如清晨时分在山

标签: opengl超级宝典pdf

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

上一篇:SDL2源代码分析8:视频显示总结(代码sd是什么意思)

下一篇:用球体模拟天空(用球体模拟天空的游戏)

  • 劳务清包违法吗?
  • 营业外收入纳税调整
  • 事业单位长期股权投资持有期间被投资单位
  • 主营业务收入科目按其所反映的经济内容不同
  • 纳入固定资产的标准
  • 经营许可证要交税吗
  • 发票没交税可以退税吗
  • 销售费用包括啥
  • 预付加油卡发票可以报销吗
  • 增值税专用发票几个点
  • 小规模开专票要计提附加税吗
  • 企业接受赠予企业固定资产是否免税
  • 企业重组资产转移是否涉税
  • 集团公司收到的发票
  • 补充协议如何生效
  • 特别纳税调整后 需要更正申报吗
  • 应返还财政额度是什么科目
  • 发票抬头写错了还能报销吗
  • 增值税专用发票抵扣期限
  • 纳税人登记为一般纳税人后一律不得转为小规模纳税
  • 小规模专票普票区别
  • 以公司名义投资好还是以个人名义投资好
  • 股权变更之后税务变更
  • 销售净利率怎么求
  • 技术服务费成本票是什么
  • 餐饮发票免税能报销吗
  • 商用房的增值税是多少
  • 基准收益率是
  • 股东借钱给公司怎么写借条
  • 网页提示摄像头未授权
  • PHP:curl_unescape()的用法_cURL函数
  • 视同销售的八种情况下会计分录怎么做?
  • win7打开启动
  • 如何做世界上最小的遥控飞机
  • 汽车定额发票怎么填写
  • 无偿转让房屋
  • php 无限级分类
  • vue叠化在哪里
  • vue watcher
  • ip a命令详解
  • Navicat for MySQL 15 v15.0.27 中文企业正式版(附安装教程) 32/64位 破解版
  • 出口免税和退税的区别
  • 微信收款怎么做会计分录
  • 用于职工福利的进项税账务处理
  • 企业向个人借款利息如何缴纳增值税
  • 帝国cms教程官方完整版
  • 其他业务收入与营业外收入
  • 公司的现金收入包括
  • 携程 海外
  • 房租押金需要缴税吗
  • 百旺金赋抄报税指南
  • 记账软件多少钱一套
  • 冲回多提的坏账准备会计分录
  • 盘盈盘亏的定义
  • 城建税多交了怎么办
  • 银行季度结息怎么记账
  • 无形资产摊销的会计科目怎么录
  • 清产核资评估报告
  • sql server 3417错误
  • 在查询结果中添加字母
  • centos下安装jdk
  • Win10 Mobile 10572怎么更新升级? 需回滚到WP 8.1
  • CentOS安装scp命令详解
  • linux运行apache
  • mac如何打开程序菜单
  • win10更新中途怎么取消
  • win10系统下怎么安装caxa2016电子图板 caxa2016电子图板安装详细图文教程
  • window系统设置
  • javascript运用
  • javascript教程完整版
  • android网络编程题库
  • python序列结构总结
  • python中set用法
  • js拖拽排序实现思路
  • A级纳税人和一般纳税人区别
  • 如何安装金税三期app
  • 应税销售额如何计算
  • 杨静儿多少岁
  • 统计表主要业务内容
  • 电子发票怎么作废
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设