位置: 编程技术 - 正文

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是什么意思)

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

  • 年终双薪究竟该怎么算
  • 一般纳税人企业所得税税率2023
  • 实验用品包括实验仪器吗
  • 小规模纳税人税率有几种
  • 收到服务费发票摘要怎么写
  • 境外设计费涉及税收
  • 存货清查的目的,主要是进行总账和明细账
  • 保险赔款个人所得税计算
  • 帮客户代付保证金违法吗
  • 出纳现金日记账表格模板
  • 错把费用计入固定资产次月如何调账
  • 启用新账簿
  • 印花税为什么不计入资产成本
  • 无形资产撤资要交税吗
  • 绿化工程企业所得税减免吗
  • 更换金税盘后数据能恢复么
  • 税收分类编码如何填写
  • 普通发票负数发票可以作废吗
  • 远程清卡显示清卡失败,证书已挂失怎么回事
  • 研发人员工资加计
  • 工程款主营业务成本
  • 农产品加计扣除政策2023最新
  • 预提保障金和交税的区别
  • 收据和发票有什么区别?买家电
  • 设备维保服务费会计分录
  • 政府会计财政拨款收入借贷方向
  • 局域网内如何设置静态ip
  • 查补以前年度房产税的账务处理
  • 个人独资企业公账转私账
  • 免租期房产税增值税如何计算
  • Mac OS X Mavericks的Finder打开不同标签的操作步骤
  • 公司为什么要签劳务协议
  • 公积金托收怎么变更
  • php获取参数值的三种方式
  • 矿产资源补偿费计入科目
  • 购买农产品没有发票入帐怎么办
  • php常用数组函数和用法
  • php的execute
  • pytorch中的数据类型
  • 允许加计扣除的委托境外研发费用
  • Stable Diffusion - API和微服务开发
  • 编译原理第三版
  • 收到待报解预算收入怎么做分录
  • 暂估入库少了
  • 建筑施工企业增值税税率调整时间
  • 补缴教育费附加免征滞纳金
  • 工会经费上缴流程
  • 含税价的基本定义是什么
  • 三代手续费操作流程
  • 软件销售收入确认时点
  • 餐饮服务需要卫生许可证吗
  • 调拨仓库
  • 跨地区经营增值税如何缴纳
  • 缴纳的工会经费现金流量表怎么记
  • 购买用品开专票怎么入账
  • 过滤重复字符串
  • mysql5.5怎么用
  • win10 build 21277
  • explorer.exe是啥意思
  • 删除kernel
  • windows7右下角网络图标不见了怎么办
  • windows to go教程
  • win7ie8和ie11
  • 实现点击下箭头的方法
  • python中用input()函数接收到的数据为
  • 搜狐畅游手游官网
  • DeviceOne 让你一见钟情的App快速开发平台
  • jquery鼠标点击事件怎么写
  • python自动化运维教程
  • jquery常用的事件绑定函数有哪些
  • jQuery ajax全局函数处理session过期后的ajax跳转问题
  • 重庆市委常委是副部级干部吗?
  • 广东省深圳市税占27%,高新技术占15%,各市分别占多少?
  • 税控发票开票软件密码怎么修改?
  • 云南人社医保缴费步骤
  • 河南省地方税务局电话
  • 充电桩充电怎么收费,几种收费方法
  • 新疆地方税务局举报电话
  • 公司汽车用油计入什么科目
  • 预缴的税额可以用留底抵扣吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设