位置: 编程技术 - 正文

glViewport()函数和glOrtho()函数的理解(glortho函数)

编辑:rootadmin

推荐整理分享glViewport()函数和glOrtho()函数的理解(glortho函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:glvertex函数,glgetdoublev函数,glgetdoublev函数,glgetdoublev函数,glbegin函数,glfw函数,glbegin函数,glbegin函数,内容如对您有帮助,希望把文章链接给更多的朋友!

在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。

glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。 而作为它的对立情况, glFrustum则产生一个透视投影。这是一种模拟真是生活中,人们视野观测物体的真实情况。例如:观察两条平行的火车到,在过了很远之后,这两条铁轨是会相交于一处的。还有,离眼睛近的物体看起来大一些,远的物体看起来小一些。

glOrtho(left, right, bottom, top, near, far), left表示视景体左面的坐标,right表示右面的坐标,bottom表示下面的,top表示上面的。这个函数简单理解起来,就是一个物体摆在那里,你怎么去截取他。这里,我们先抛开glViewport函数不看。先单独理解glOrtho的功能。 假设有一个球体,半径为1,圆心在(0, 0, 0),那么,我们设定glOrtho(-1.5, 1.5, -1.5, 1.5, -, );就表示用一个宽高都是3的框框把这个球体整个都装了进来。 如果设定glOrtho(0.0, 1.5, -1.5, 1.5, -, );就表示用一个宽是1.5, 高是3的框框把整个球体的右面装进来;如果设定glOrtho(0.0, 1.5, 0.0, 1.5, -, );就表示用一个宽和高都是1.5的框框把球体的右上角装了进来。上述三种情况可以见图:

从上述三种情况,我们可以大致了解glOrtho函数的用法。glOrtho函数只是负责使用什么样的视景体来截取图像,并不负责使用某种规则把图像呈现在屏幕上。

glViewport主要完成这样的功能。它负责把视景体截取的图像按照怎样的高和宽显示到屏幕上。

比如:如果我们使用glut库建立一个窗体:glutInitWindowSize(, ); 然后使用glutReshapeFunc(reshape); reshape代码如下:

这样是可以看到一个正常的球体的。但是,如果我们创建窗体时glutInitWindowSize(, ),那么看到的图像就是变形的。上述情况见图。

glViewport()函数和glOrtho()函数的理解(glortho函数)

因为我们是用一个正方形截面的视景体截取的图像,但是拉伸到屏幕上显示的时候,就变成了glViewport(0, 0, , );也就是显示屏变宽了, 倒是显示的时候把一个正方形的图像“活生生的给拉宽了”。就会产生变形。这样,就需要我们调整我们的OpenGL显示屏了。我们可以不用那么宽,因为我们是用的正方形的视景体,所以虽然窗体是宽,但是我们只用其中的就够了。修改一下程序。

OK。如果你能看明白我写的内容。你可能对glViewport函数有个大致的了解。

不过,我们采用上面的办法,就是只使用了原来屏幕的一部分(宽度从到我们没有用来显示图像)。如果我们想用整个OpenGL屏幕显示图像,但是又不使图像变形怎么办?

那就只能修改glOrtho函数了。也就是说,我们使用一个和窗体一样比例的视景体(而不再是正方形的视景体)来截取图像。例如,对于(, )的窗体,我们使用glOrtho(-1.5 * /, 1.5 * /, -1.5, 1.5, -, ),就是截取的时候,我们就使用一个“扁扁”的视景体截取,那么,显示的到OpenGL屏幕时(, ),我们只要正常把这个扁扁的截取图像显示(扁扁的截取图像是指整个截取的图像,包括球形四周的黑色部分。 球形还是正常圆形的),就可以了。如:

另外,关于glViewport()函数,我们还可以用来调整图像的分辨率。例如,保持目前的窗体大小不变,我们如果用这个size来只显示整个物体的一部分,那么图像的分辨率就必然会增大。例如:

可以把分辨率扩大4倍。

而如果再修改一下glViewport(0, 0, 2 * (GLsizei)w, 2 * (GLsizei)h); 则可以把分辨率扩大倍。

完整的测试程序:

【Cocos2d-x】shader语法注意事项 1.不要用隐式类型转换例子1:inti=5;//没问题floatr=i*0.;//有问题例子2:floata=0;//定义和赋值float不能不加.0以上两个例子在OpenGL上没任何问题,但在移动端

OpenGL Framebuffer Object (FBO) 在OpenGL中,OpenGLContext有一个默认的FBO用来绘制图像,但是我们也可以创建新的用户定义的Framebuffers,这样我们可以绘制到自定义的framebuffer,而不会影响到

学习Nehe Lesson 6 && Lesson 7 && Lesson 8 这三课的基础都是第五课的那个正方体,无论是纹理映射或是光照键盘还是混合,都是对立方体进行的操作。当然,把正方体换成别的几何物体比如说

标签: glortho函数

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

上一篇:【Cocos2d-x】图片描边的一种比较好的shader实现方法(cocos2d官网)

下一篇:【Cocos2d-x】shader语法注意事项(cocoscreator shader)

  • 小规模30万免增值税1点怎么申报税款
  • 增值税税率
  • 员工在外出差的说说
  • 代扣代缴消费税的会计分录
  • 增值税专用发票的三流合一是什么意思
  • 分公司是否需要刻章
  • 金税盘显示已到锁死期,未到汇总期是什么原因
  • 公司购买的货架入哪个科目
  • 季度利润表格式
  • 商业承兑汇票托收凭证怎么做分录
  • 食堂收入支出结构图
  • 员工异地交纳保险怎么交
  • 超过180天增票不抵扣财务还可以入账吗?
  • 旅行社成本票没有收到,怎么挂账
  • 单位社保扣款
  • 专项资金如何做账务处理
  • 企业会计准则制度
  • 发票和款未付可以抵扣吗
  • 资产负债应付账款怎么算
  • 什么是民政福利企业
  • 事业单位坏账怎么处理
  • 库存商品适用于什么账簿
  • 外贸公司有出口退税吗
  • 补交上一年度的所得税怎么做账
  • 金税盘纳税申报
  • 没有开工没有收入用书面语言表达
  • 出口退税怎么申报个税
  • 开房租发票交的税,因优惠政策退税,怎么账务处理
  • 收购自然人股东的股权要注意什么
  • php中实现文件上传的函数
  • linux命令有啥用
  • runservice.exe - runservice是什么进程 有什么用
  • 归还银行借款摘要模板
  • 股东分红个人所得税怎么算
  • php数组函数题目
  • 威斯康星州1976
  • 房产前期开发
  • 捐款怎么处理
  • promise的几种状态
  • 详解Yii2 rules 的验证规则
  • 增值税减免附加税用计提吗
  • 建立分公司流程
  • 怎么用java写代码
  • 其他权益工具投资公允价值变动怎么计算
  • 物业公司广告费收入税率
  • 企业缴纳印花税时需要
  • 涉及无形资产的会计处理
  • 零税率应税服务出口退税
  • 2、开办费用计入哪个账户?
  • 失控发票进项税额结转成本
  • 咨询费发票能抵扣吗
  • 出口退税税款账务处理
  • 建筑工程老项目开票截止日期
  • 视同销售的账务处理如何做?
  • 半成品是指正在各生产阶段加工的产品
  • 押金为什么要一个月才退
  • 加油的增值税发票几个点
  • 单位租赁个人房子怎么缴纳房产税
  • 物业安装摄像头的规定
  • 暂估入库做账
  • 不得从销项税额中抵扣进项税的有哪些
  • 企业什么情形必须签无固定期限合同
  • 关于读书的名言名句
  • centos下载命令
  • 电脑开机自动弹出
  • 提高生殖能力
  • ubuntu中安装vim
  • opengl绘图
  • Android之Volley
  • shader入门
  • Android 判断是否打开了微信
  • 狗刨怎么学
  • unity3d游戏开发标准教程pdf
  • JavaScript中的事件处理
  • jquery的validate前端表单验证
  • 中国进口国外品牌排行榜
  • 发货确认收入还是以开票确认收入
  • 广西小学成绩查询入口官网
  • 深圳关内停车场收费标准
  • 服务礼仪包括哪三点
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设