位置: 编程技术 - 正文

opengl 投影 glOrtho gluPerspective gluLookAt 转载不同作者的理解(opengl 投影矩阵)

编辑:rootadmin

推荐整理分享opengl 投影 glOrtho gluPerspective gluLookAt 转载不同作者的理解(opengl 投影矩阵),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl投影方式,opengl 投影矩阵,opengl 投影推导,opengl正投影,opengl 投影矩阵函数,opengl投影变换,opengl 投影推导,opengl 投影矩阵,内容如对您有帮助,希望把文章链接给更多的朋友!

1.

这由于正投影的逻辑宽度在前,后,顶,底,左,右都是相等的. 正投影往往适用与CAD, 文本,建筑绘图,2D游戏等用3D来描绘2D的处理,关键代码:

void glOrtho(double left, double right, double bottom, double top, double near_val, double far_val);

//这里注意是 GL 的函数, glOrtho更像是设置平面的坐标系统

//left是左坐标,right是右坐标,bottom是底坐标,top是顶坐标,near_val是近可视,far_val是远可视

透视投影则执行透视除法,对距离观察者较远的物体矩阵进行缩短和收缩.在投影到屏幕后,可视区域后端和前端的可视宽度不同.所以透视投影更适用于3D场景.例如3D游戏,关键代码:

void gluPerspective(double fovy, double aspect, double zNear, double zFar);

//这里注意是 GLU 的函数,gluPerspective像是设置摄像机,也像人的&#;睛

//fovy为可视角度,aspect宽高比例,zNear近可视,zFar是远可视

一般来说透视投影会配合

glu.gluLookAt(0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0);

使用,原形为

public void gluLookAt(double eyeX, double eyeY, double eyeZ, //表示&#;睛的坐标

double centerX, double centerY, double centerZ, //&#;睛看向哪个点

double upX, double upY, double upZ) ; //角度宽度,一般为0,1,0

在不使用 gluLookAt 的情况下,系统默认&#;睛(摄像机)在原点,也就是(0,0,0)点,向着负Z轴方向看,那么&#;睛看向的反方向就是正Z轴方向

简单比喻就是gluPerspective设置&#;睛的性能 , gluLookAt 设置&#;睛的位置和视觉方向.

2. gluLookAt ( eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz);

opengl 投影 glOrtho gluPerspective gluLookAt 转载不同作者的理解(opengl 投影矩阵)

void glOrtho ( left, right, bottom, top, zNear, zFar);

正投影的视景体是这么定义的:

仅以eye,center和up为参考点的长方体。这里Ortho的6个参数均自带正负号。

例子: eye = [ , 0, 0 ] ,center=[ , 0, -1 ]说明从eye看向center点,up=[ 0, 1, 0 ] glOrtho ( -, , 0, , , ),表示的视景体是[ , ]*[ 0, ]*[ -, - ]。注意到本例中eye并不在视景体里面。

红点是eye,蓝色箭头是看的方向(也就是center-up),视景体是ABCDEFGH,最后在屏幕上显示的是将EFGH面压向ABCD(就是说是从ABCD面看向这个视景体)。

再给几个例子。eye = [0,0,0],center = [1,1,0],up = [ -1, 1, 0],glOrtho = [ -, , -, , -5, 5 ]

eye在原点,看向center这个点,头顶朝up。那么ABCDEFGH为视景体,EFGH是left面,ABCD是right面,ABFE是zNear面,DCGH是zFar面,BCGF是bottom面,ADHE是top面。ABDC在 z = ,EFGH在 z = - , ABFE和DCGH都垂直于center-eye这个向量。最后在显示器上的是从ABFE看这个视景体,即将DCGH压向ABFE。

对于上面的例子,仅将center改成(-1, -1, 0),即与图中的center方向相反,则EFGH是right面,ABCD是left面,ABFE是zFar面,DCGH是zNear面,BCGF是bottom面,ADHE是top面

以上,知道怎么定义视景体了:假设人站在eye处,&#;睛看向center这个点,头顶朝着up这个点。这3个&#;固定后你的头也就完全固定住了。left和right分别确定了头左右2边范围,注意,头左边的&#;是负的!也就是说,如果left= -,right=表示从头左边到头右边的范围,但是当left=5,right=,表示的却是头右边5到的范围。bottom和top表示头下方和上方的范围,bottom = -, top=,说明从头下面到头上面,bottom = 5, top=,表示头上面5到。zNear和zFar表示头(&#;睛)后前的范围,zNear = -, zFar=,表示从&#;睛后面到&#;睛前面,zNear = 5, zFar=,表示从&#;前5到。注意,上面的顺序都可以交换,比如left=5,right=和left=,right=5,表示的左右范围都是一样的,并且这个改变不会影响你的观察结果,但是!建议按从左到右,从下到上,从后到前的顺序。最终的观察方向是由LookAt函数决定,Ortho只是在LookAt给定的条件下创建可视区域(视景体)。

gluPerspective也和上面的Ortho差不多。gluPerspective( fovy, aspect, zNear, zFar ),他和Ortho不同的是zNear和zFar必须大于0,也就是说在LookAt条件下(如不显示调用,仍有默认&#;),只能是在&#;睛前面的视景体,不能裁剪到&#;睛后面,至于zNear和zFar是否一定要求 Near > Far 这个我没试过,但是在编程的时候还是这么认为吧,免得出错。

注意:

1、GL编程中,有这样的要求:视点变换在模型变换之前指定,但投影变换和视口变换可以在绘图之前的任意时候指定。世界坐标系中v点由3D到2D(这里2D不是屏幕坐标,若到屏幕还要经过视口变换)是经过变换:ProjectinMatrix * ModelViewMatrix * v,LookAt是ModelViewMatrix一部分,Ortho和Perspective都是ProjectinMatrix的一部分。

3. gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar )

near 和 far 决定了投影参考点与裁剪窗口的距离,fovy决定了裁剪窗口的高度,还有个参数 aspect 确定了裁剪窗口的长宽比例。

所以fovy越大,裁剪窗口越大,相对的裁剪窗口中的物体就越小。

void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);

正交投影与 glOrtho :void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far) 在现场可见量由两个浅蓝色飞机围成块。透视与 gluPerspective :void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar )

在现场可见卷是由两截断金字塔浅蓝色飞机包围。

透视与 glFrustum :void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal);

4.

OpenGL 矩阵变换(讲的太好了~!) Overview几何数据——顶点位置,和标准向量(normalvectors),在OpenGL管道raterization处理过程之前可通过顶点操作(VertexOperation)和基本组合操作改变这些数据。Obj

4.3 投影变换 投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。投影也是使用矩阵来实现的。计算一个用

shader之旅-7-平面阴影(planar shadow) 根据《real-timeshadow》这本书第二章中的推导,实现了最简单的阴影技术。planarshadow通过一个投影矩阵将被灯光照射的物体的顶点沿着光线方向投影到接

标签: opengl 投影矩阵

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

上一篇:阴影映射(Shadow Map)的研究(四)(阴影效果有什么用)

下一篇:OpenGL 矩阵变换(讲的太好了~!)(opengl 旋转矩阵)

  • 印花税按什么金额吗
  • 计提当月社保会计分录
  • 季报企业所税缴税了,但年报是亏损的
  • 负数增长到正数的例子
  • 期末结转增值税
  • 周转材料低值易耗品科目借方登记低值易耗品的减少
  • 最新企业准则
  • 财产租赁合同印花税计税依据含税吗
  • 分支机构可不可以不建账合并到总机构?
  • 税控专用发票和普通发票
  • 工商年报中的纳税总额是所属期应交还是实交税额
  • 可以给农村信用社的存折转账吗
  • 主营业务税金及附加怎么算
  • 发票二维码压线可以用吗
  • 糖类计算公式
  • 积分抵扣所开的发票,也能在税前扣除吗?
  • 马克龙成就
  • 分期付款融资账务处理
  • 金融服务收入怎么算
  • 理财代持有法律效力吗
  • 企业所得税减免税额计算公式
  • 固定资产入账价值计算公式
  • linux zen3
  • 营业外支出包括哪些科目
  • 混合债务工具
  • 企业事业单位应当采取有效措施
  • Sublime Text v4.0(4143)破解方法
  • 浠字的意思和含义是什么
  • 原生微信小程序面试题
  • hadoop集群搭建完整教程
  • redis提供了对值进行运算的命令
  • 公司与公司往来账表格怎么制作
  • 职工薪酬在利润表哪里看
  • 代扣税费分录
  • 专用发票金额与专票不符
  • 金税开票系统
  • 差旅费适用税率
  • mysql数据库如何升级
  • 附加税减半征收政策是哪个文件
  • 劳务公司开出的劳务票需要申报个税吗
  • 光伏发电计费问题
  • 建安企业用什么会计制度
  • 开专票还要另外再交钱么
  • 公司市场部门有什么职位
  • 甲方代付农民工工资谁报个税
  • 物业公司付电业费合法吗
  • 电子承兑被拒付(可拒付追索)
  • 保险公司理赔款如何入账
  • MySQL 5.6 中 TIMESTAMP有那些变化
  • win10字体边缘模糊
  • Win10 Mobile RS2预览版WiFi设置页面将和pc页面相同
  • Linux中stat命令显示文件的基本使用教程
  • windows更新过程中
  • xp系统如何更新
  • 修改windows版本
  • winxp开启远程控制
  • win7系统开机后桌面黑屏
  • 一个简单的群规内容
  • java美化按钮
  • js代码规范
  • cocos2048
  • cocos2dx游戏开发
  • nodejs游戏开发
  • 复制文件到c盘需要管理员权限
  • python开发技术详解(全27集),5
  • android网络请求时怎么取消
  • python元组和数组
  • 广度优先搜索输出路径
  • Node.js+Express+MySql实现用户登录注册功能
  • JavaScript中的数据类型
  • python中模块的作用
  • jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
  • 个税申报系统如何增加新单位
  • 个体工商户个人所得税
  • 通州区税务局办税大厅电话号码
  • 公司账户注销了,是不是网银也注销了
  • 非盈利org
  • 青岛市税务局归谁管
  • 郑州市地方税务局新郑国际机场分局
  • 贵州省税务局领导介绍
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设