位置: 编程技术 - 正文

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

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

  • 个税返还奖励财务人员流程
  • 期末有留底税额可需要进行账务处理
  • 代扣代缴个人所得税账务处理
  • 小规模纳税人增值税优惠政策
  • 专利权的入账价值计算公式
  • 免征增值税和增值税区别
  • 以前年度损益缴纳的税款在企业所得税中怎么表示
  • 个体工商户生产经营所得怎么申报
  • 收到红字信息表不能直接开具
  • 一般纳税人工会经费可以零申报吗
  • 长期待摊费用可以抵扣吗
  • 发票冲红增值税怎么申报
  • 抵账房产财务入账
  • 开具发票财务需要管理吗?
  • 母子公司之间转让土地使用权
  • 混业经营试点
  • 银行承兑汇票盖已承兑登记
  • 2020年最新增值税租车费
  • 免租与转租分别什么意思
  • 核定征收的企业需要汇算清缴吗
  • 小规模纳税人需要汇算清缴吗
  • 残保金工资总额怎么算
  • 基金赎回手续费怎么计算
  • 已达到计算机的连接数最大值win7
  • 生产成本包括什么科目内容
  • 通用文件系统
  • 合伙企业必须有什么并以其作为企业法律基础
  • win10删除了此电脑
  • 进程rundll32
  • 公寓收费标准
  • 慈善捐赠金额排行
  • 马瑙斯市
  • 贷款支付的本息如何记账
  • 没有发票的成本怎么算
  • framework 4 client profile
  • 酒店原材料内部分析
  • 企业购进废旧厂房税率
  • 要点初见:Stable Diffusion NovelAI模型优质文字Tag汇总与实践【魔咒汇总】
  • 融资租赁业务增资扩股
  • 初级职称到中级职称需要上继续教育课吗
  • php搜索功能怎么实现
  • 现金流量表要填满吗
  • 保教费属于什么收入
  • 什么是服务型
  • 让渡资产使用权收入什么意思
  • 固定资产指的是几年度
  • 可转债会计分录怎么做
  • 个人独资企业需要缴纳哪些税种
  • 为什么固定资产减值准备一经计提不得转回
  • 中级财务会计报告心得体会
  • 固定资产不折旧直接进费用
  • 资产减值损失如何计提
  • 装修费用一次性摊好还是分期好
  • 销售退货怎么开票
  • 职工福利费的好处
  • MySQL thread_stack连接线程的优化
  • 表空间 数据库
  • JQS.exe是什么进程
  • imac 5k屏幕参数
  • pic是啥软件
  • 如何用u盘安装win8操作系统
  • Win10预览版镜像
  • windows alt r
  • javascript.info
  • node.js require() 源码解读
  • android 自定义
  • android ui绘制
  • Unity3D游戏开发引擎
  • 基于重大误解实施的民事法律行为
  • vue做移动端
  • websocket方法
  • unity打包全屏
  • unity mesh编程
  • android:ViewPager与FragmentPagerAdapter
  • 郑州税务局电话客服电话
  • 税收效应分析供求曲线
  • 进项发票认证了怎么冲红
  • 北京市税务局 案件
  • 贵州新农合可以打电话停保吗
  • 广东省国家税务总局稽查局局长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设