位置: 编程技术 - 正文

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

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

  • 关于办理退税手续的通知
  • 企业级软件开发
  • 水果销售公司账务怎么做
  • 虚拟货币会计分录
  • 事业单位无形资产摊销
  • 资产负债表中存货项目金额怎么算
  • 小企业销售费用多少算高
  • 公司收到一次性吸纳就业补贴款怎么分录
  • 核定征收企业有利润如何注销税务登记
  • 借别人钱收据怎么写
  • 不含税劳务报酬怎么交税的
  • 确认委托代销收入会计分录
  • 别人提供原材料加工后加工费
  • 递延纳税筹划策略研究
  • 子公司给母公司开票
  • 私人帐户可以给别人用吗
  • 缺联发票税务怎么处理
  • 税收征管法关于全款未收房的规定
  • 延期缴纳税款的条件是什么
  • 小微企业一季度30万免税
  • 外汇风险怎么规避
  • 退休人员工资所得税纳税调整
  • 劳务收入不足800
  • 机动车销售发票如何认证抵扣?
  • 查账征收的企业所得税什么时候开始汇算
  • 外资公司股东要求
  • 临时股东大会的召开情形
  • 记账凭证的摘要怎么填写
  • 商会账目
  • linux中的文件
  • 完美解决索尼电视arc无声音
  • php课堂笔记
  • PHP:imagettfbbox()的用法_GD库图像处理函数
  • 销售收入与销售成本
  • 大群的芒基蝠鲼跃出水面,墨西哥加利福尼亚湾 (© Mark Carwardine/Minden Pictures)
  • 建筑劳务费发票有进项抵扣吗
  • 淘宝买建材
  • php实现购物车功能
  • 基于核心素养下的大单元教学设计
  • 猿创征文,新芯设计
  • 电子承兑汇票到期怎么收款
  • pandas inner join
  • 自由会计师
  • 织梦程序
  • 企业接受捐赠如何开具发票
  • mysql主从复制实现原理
  • 去年的分红奖金是多少
  • 员工垫付费用怎么做账
  • 业务招待费有
  • 当月发生业务下月开票如何做账
  • 金税盘技术维护费
  • 一般纳税人增值税申报操作流程
  • 非盈利社会团体可以开发票吗
  • 预付卡销售和充值怎么做账
  • 主营业务收入需要减去增值税吗
  • 利息收入是不是企业的收入
  • 普通发票作废影响额度吗
  • select语句中的select*说明
  • mysql数据库内存缓存设置
  • 更新最新版win11,任务栏不见了
  • windows9预览版下载
  • linux环境什么意思
  • windows7如何启动任务管理器
  • win8初始登录账号密码
  • 安装WIN10系统后怎么调过设置
  • win7系统玩游戏怎么样
  • linux防病毒措施
  • linux系统怎么关闭137端口
  • 触发器csdn
  • cocos2d-js教程
  • 卸载安装软件
  • cocos2dx 3.3 tilemap 缩放滑动并且准确点击对象
  • jquery自动完成插件
  • nodejs开发博客
  • shell的变量分为哪三种
  • shell if -lt
  • javascript中的数据类型分为两大类
  • 国税局升迁难么
  • 税务一证通进入哪个网站
  • 中国有没有豁免权
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设