位置: 编程技术 - 正文

OpenGl学习笔记3之模型变换、视图变换、投影变换、视口变换介绍(opengl入门视频教程)

编辑:rootadmin

推荐整理分享OpenGl学习笔记3之模型变换、视图变换、投影变换、视口变换介绍(opengl入门视频教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl教程视频,opengl基础知识,opengl教程48讲,opengl入门视频教程,opengl使用教程,opengl learn,opengl基础教程,opengl基础教程,内容如对您有帮助,希望把文章链接给更多的朋友!

模型变换、视图变换、投影变换、视口变换介绍

opengl中存在四种变换,分别是模型变换,视图变换,投影变换,视口变换。这四种变换是图形渲染的基本操作,实质上这四种变换都是由矩阵乘法表示(这些操作都是由一个4*4的矩阵来完成的),通过变换,我们可以看到各种通的显示效果,最简单的效果就是让图元沿着某个方向变换(放大,缩小,翻转等)或者对所要显示的图元进行裁剪。接下来我们就详细介绍这四种变换以及相互之间的联系。

我们要在屏幕上显示一个具有三维坐标的物体,大致需要以下步骤:

1. 进行模型,视图变换(变换并不是都需要的,根据自己所绘制的图形情况来确定使用哪种变换),效果为:旋转,平移,缩放等。一般情况下,绘制一个场景时需要组合使用几种变换。

2. 位于窗口(即视景体,暂时理解为窗口)之外的物体(或者一部分)需要裁减掉,等于最后所显示的图形中并没有窗口之外的物体。即:“投影变换”。

3. 经过变换后的坐标和屏幕的像素建立对应关系。该过程称为“视口变换”。

我们现在用“摄像师照毕业照”所涉及的动作来解释下产生目标场景视图变换中四种变换的作用。

1. 视图变换:照相时我们需要把照相机固定在三脚架上,并让镜头对准所照物体(图形学叫:场景,我们以后使用“场景”来代表所照物体)。

2. 模型变换:我们需要对场景中的物体进行安排,类&#;于我们的毕业照,摄像师总要对照相的人进行规划(:这个高个子人往后站,那个人往左边一点,那个往右一点)。这样做的目的是让场景中的物体位置是我们所期望的。

3. 投影变换:当镜头的人看着很小(也就是距离照相机很远),摄像师要推镜头,让场景(照片)中的人变大,当场景(照片)中人很多,没有覆盖全,我们需要拉镜头,把所有人放到场景(照片)中。

注:照片可以理解为我们所绘制的场景。

4. 视口变换:当摄像师给我们照好毕业照时,需要进行洗印相片,此时我们可能根据需要放大照片(PS:寸变寸)或者缩小照片,这个过程称为视口变换

注:视口变换后,洗印出的照片就相当于我们在屏幕上绘制的场景的最后效果。

注:以上的场景变换顺序比一定严&#;一致,但是,视图变换必须出现在模型变换前,投影和视口变换可以放在程序(绘制)结束之前的任何地方。

四种场景视图变换的原理(PS:这些原理了解即可,写程序时我们只需要调用opengl中相对应的函数来实现以上功能):为了进行场景中各种视图的变换,我们需要创建一个4*4的矩阵M,然后把它与场景中的每个顶点V的坐标相乘,来实现坐标的变换,即V`=M*V。M矩阵中的参数就表示我们进行何种变换。顶点中的物体的坐标与M相乘变成V`,然后经过绘制,就变成我们想要看到的结果了。

OpenGl学习笔记3之模型变换、视图变换、投影变换、视口变换介绍(opengl入门视频教程)

注:物体的顶点有四个坐标(x,y,z,w),其中W默认为1,所以我们编写程序时只编写前三个坐标,即X,Y,Z。

注:当我们使用四种变换来改变场景中的物体时,其物体表面的法线也随之变换(使得变换后的物体的顶点坐标与其所在平面的法线之间具有正确的对应关系)。PS:法线在我们绘制场景中很重要。

四种场景视图变换后产生的效果

[1] 其中视图和模型变换共同形成了【模型视图矩阵】,这个矩阵与物体世界坐标相乘,产生对应的视觉坐标。

[2] 若程序中定义了投影矩阵,投影矩阵将产生“裁剪坐标”,这些裁剪坐标共同定义了“视景体”(PS:暂时理解为一个框框,在这个框框里的物体,才能被显示出来),作用于这个视景体之外的物体将会被裁剪掉,不会在最终的场景(理解为:冲洗出来的照片)中出现。

[3] 随后,opengl程序中发生的是“透视除法”,它把物体的坐标&#;分别除以W(W默认为1),产生“设备坐标”(opengl自动进行此步)。

[4] 接下来该“视口变换”,作用是把上一步的坐标变成“窗口坐标”,我们可以通过控制视口的大小来让场景中的物体变大或者变小。

以上的绘制场景步骤我们概括为一段话:

程序中指定了必要的变换后,我们就可以绘制场景了(理解为:准备拍照),

(1)opengl通过模型、视图变换,对场景中的物体的每个顶点进行变换。(2)然后根据我们自己指定的投影变换对每个顶点再次进行变换,如果顶点位视景体之外,它就被裁剪掉。(3)最后经过变换的剩余顶点除以W(透视除法),然后映射到视口。

注:有人一定要问了?在我们电脑屏幕上显示出的物体只需要具备X,Y坐标即可(屏幕是二维的),为什么还有Z坐标?

Z坐标的作用是反应物体顶点的深度(即从顶点到屏幕的距离),由于我们生活中看到的景象是“近大远小”,当两个物体前后放在我们面前时,由于前一个物体的遮挡,我们只能看到后一个物体的局部(很明显的道理嘛),Z坐标就是要实现以上的效果,当场景中两个物体的X,Y坐标一致,而Z坐标不同,opengl就可以使用此信息判断哪个表面被另一个表面遮挡了,从而避免绘制那个被遮挡的表面(让程序渲染效率更高),此技术称为“隐藏表面消除技术”。

本节简单介绍了opengl中的四种场景变换的概念,下一章我们分章节详细介绍各变换是如何使用的。

UIView基类的简述 UIView1.定义UIView类定义了一块在屏幕上的一块矩形区域并提供了一系列用来管理矩形区域内容的接口,即在程序运行时,一个创建的UIView对象不仅负责显

【Cocos2d-x】图片描边的一种比较好的shader实现方法 图片描边需求如下:1.可指定描边宽度2.可指定描边颜色3.可用于字体图片描边我所知道的方式有以下几种:1.Cocos2d-x3.x中,字体用FreeType库,字体描边可

glViewport()函数和glOrtho()函数的理解 在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。glOrtho是创建一个正交平行的视景体。一般用于物体不会因为离屏幕的远近而产生大小的变

标签: opengl入门视频教程

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

上一篇:OpenGL编程逐步深入(一)创建一个窗口(opengl gpu编程)

下一篇:UIView基类的简述(uiview继承哪个类)

  • 个人独资企业要注意什么
  • 旅游业成本具体有哪些
  • 偶然所得税起征点800是每月吗
  • 税收契子怎么算
  • 小规模纳税人劳务派遣差额征税税率
  • 垃圾袋发票类别是什么
  • 人工费能不能抵扣进项税
  • 公司给员工购买意外险怎么做账
  • 小规模纳税人报销会计分录
  • 个税申报截止日期2023年8月
  • 企业筹建期间开办费计入什么科目
  • 仪器检测费发票哪一类
  • 客户预付货款会计分录
  • 安装工程什么时候计提成本费用
  • 以存货抵偿债务结转的相关存货跌价准备
  • 个人出租住房如何开票
  • 发票认证了但是没记账
  • 生产型企业增值税率是多少
  • 小型微利企业所得税优惠政策2022
  • 土地使用税级别划分标准
  • 蔬菜免税会计分录怎么做
  • 建筑企业无票支出如何处理
  • 发票在验旧日期之后作废吗
  • 小型微利企业预缴
  • 资本公积的借方和贷方各表示什么
  • 苹果手机怎么看国行还是美版
  • 小商业企业应交所得税
  • 民宿的房屋租赁合同模板
  • 保证合同的担保范围包括
  • Linux怎么使用Windows的软件
  • osXYosemite怎么更新
  • PHP:oci_pconnect()的用法_Oracle函数
  • 在建工程完工后结转会计分录
  • 分期付款购买固定资产折现率怎么算
  • 谷歌浏览器历史记录插件
  • 企业为员工提供服务要交增值税吗
  • 导航栏不变,切换怎么办
  • 凯丽温泉可以做spa
  • 索尔兹伯里评价
  • 非正常损失可以税前扣除吗
  • vue数据表
  • lvm部署的命令
  • php array_fill
  • 其他应付款的账户结构
  • 农村合作社不报税会导致经营异常吗
  • 公司自用咖啡机怎么处理
  • 资源税类的税种是
  • 个税汇算要清缴么
  • 固定资产折旧的影响因素
  • 金税四期的基本理念
  • 劳务派遣人员代招聘多少钱一个人
  • 固定资产清理的借贷方向表示什么
  • 有限合伙企业协议
  • 固定资产怎么做账
  • 盈利能力分析的理论意义和现实意义
  • 发票只能用一次吗
  • 报销差旅费用什么收款凭证还是转账凭证
  • 月末未完工半成品的分录
  • 会计凭证移交凭证需要哪些程序
  • window系统安装流程
  • centos7如何修改用户名
  • grub rescue修复引导找不到grub
  • freebsd安装教程
  • u盘pe安装win7系统
  • windows画图程序名
  • win10专业版注册表在哪里
  • linux如何创建ftp
  • 一个简单的群规内容
  • cmd命令是干嘛的
  • Setver、Share、Subst命令的使用方法
  • django实现登录注册功能
  • 批处理 leq
  • JavaScript toFixed() 方法
  • js实现回文
  • 如何查询企业股票代码
  • 什么是增值税免抵税额
  • 处级工作调动用什么手续
  • 中华人民共和国刑法
  • 福建原盐和自然盐有什么区别
  • 残疾人个体工商户补贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设