投影变换与视口变换

一些说明:

0. 投影变换:描述如何指定视景体(viewing volume)的形状和方向。视口变换:解释如何控制三维模型坐标到屏幕坐标的变换。

1. 无论是透视投影还是平行投影(正交投影),只有在视景体中的物体才可见。

2. 下图为OpenGL默认视点位置

   (eyex,eyey,eyez) = (0.0,0.0,0.0); (upx,upy,upz) = (0.0,1.0,0.0) 指向z轴负半轴。

   (也可通过gluLookAt来指定)

2010080317212186.png

函数介绍:

视点设置

2010080316562265.png

/* 该函数用于设置视点的位置,视点聚焦的位置,以及视点的向上方向 */

// 令: v1(centerx-eyex, centery-eyey, centerz-eyez)  v2(upx, upy, upz)

//      v3为v2在v1为法向量平面上的投影向量

// 如果向量v1与v2平行,则该视点将看不到任何物体。【要避免这种情况】

// v2并非是视点的向上方向,即也不是经过视口变换,投影到二维屏幕上图像的向上方向。

// 视点的向上方向为v3。

void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, 

  GLdouble centerx, GLdouble centery, GLdouble centerz, 

  GLdouble upx, GLdouble upy, GLdouble upz );


透视投影(相机模型)

/* 该函数用于创建对称透视四棱台视景体(该四棱台视景体上下面为相似的长方形,两长方形中心的连线为其高) */

// fovy为竖直方向的视角(单位°),范围:(0,180),角度愈大,能看到的东西越多。为图中的∠MON

//  aspect为宽高比PQ/MN(为一正数)

//  zNear为视点到近裁截面的距离OA(为一正数)

//  zFar为视点到远裁截面的距离OB(为一正数  OB>OA)

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


/* 该函数用于创建透视四棱台视景体(该四棱台视景体上下面为相似的长方形,但两长方形中心的连线不一定为其高) */

// P(left, top) T(right, bottom) Q(right, top) S(left, bottom)

//  zNear为视点到近裁截面的距离(为一正数)

//  zFar为视点到远裁截面的距离(为一正数  zFar>zNear)

void glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar );


平行投影

2010080409545674.png

/* 该函数用于创建平行投影视景体方盒 */

// P(left, top) T(right, bottom) Q(right, top) S(left, bottom)

// near,far为正表示在视点的前方,为负表示在视点的后方(这并不是说在视点前方的就会被显示,后方就不会显示)

// 如:gluLookAt(0.0,0.0,1.0, 0.0,0.0,0.0, 0.0,1.0,0.0);  glOrtho(-10.0,10.0,-10.0,10.0,-7.0,9.0);

// auxWireSphere(8.0); 该网格球才能被完整地显示(即整个球落在视景体之内)。

2010080316485015.png

void glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far );


视口变换

2010080317131366.png

/* 该函数用来指定进行视口变换时,屏幕原点和长宽值 */

void glViewport( GLint x, GLint y, GLsizei width, GLsizei height );

转载于:https://www.cnblogs.com/kekec/archive/2010/08/03/1791413.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 按钮设置图片_Java中如何设置带图片按钮的大小

在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题, 按照方法:JButton jb1 new JButton();jb1.setBounds(0, 0, 25, 20);ImageIcon ii new ImageIcon("images/x…

JAVA 异常库

为什么80%的码农都做不了架构师?>>> 1.java.lang.NumberFormatException: multiple points已解决 多线程方法中使用了共享变量SimpleDateFormat,报如下错误: java.lang.NumberFormatException: multiple points at sun.misc.Floa…

WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换

WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换独立观察员 2021 年 8 月 23 日我们平常在 WPF 中进行资源绑定操作,一般就是用 StaticResource 或者 DynamicResource 后面跟上资源的 key 这种形式,能满足大部分需求。但是有的时候&am…

2009年最佳80后科技创业者

近日,《商业周刊》公布了2009年最有前途的科技初创公司及青年创业者名单,这些企业创始人年龄都在30岁及以下。商业周刊表示,从这些创业公司来看,创新依然存在并发展良好。以下为其详细名单,包括入选初创的业务描述以及…

Commons里的DButil

今天试用了一下,感觉还不错。说下需求:直接用jdbc天天开连接,关连接么的头疼。要将结果转化为xml格式,这个用XStream格式。用hibernate来搞这个有点杀鸡用牛刀的意思,如果直接用jdbc又有点繁琐。所以试用了一下这个东西…

你一直憋着的那个屁,放出来时真的有人知道吗?我先告诉你憋着不放的屁会到哪去……...

全世界只有3.14 % 的人关注了爆炸吧知识制作团队制作人 超模君编剧 恐恐恐插画 杨羊羊友情出演 超模君 想增加更多的奇怪知识?带你入学↓↓↓关注“爆炸吧知识”日增怪知识!

Android中View绘制流程

2019独角兽企业重金招聘Python工程师标准>>> 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为 根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的…

从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式

本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery…

如何更改 C# Record 构造函数的行为

如何更改 C# Record 构造函数的行为Record[1] 是 C# 9 中的一个新功能。Record是从Structs[2]借用的特殊类, 因为它们具有 基于值的相等性,您可以将它们视为两类类型之间的混合体。默认情况下,它们或多或少是不可变的,并且具有语法…

java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例

所谓有权图,就是图中的每一条边上都会有相应的一个或一组值。通常情况下,这个值只是一个数字如:在交通运输网中,边上的权值可能表示的是路程,也可能表示的是运输费用(显然二者都是数字)。不过,边上的权值也…

[原]一步一步自己制作弹出框

说到javascript弹出框的制作,将其实现步骤分开,其实很容易。下面,将拆分页面弹出框的制作步骤。首先,准备编辑工具(废话),其实,您可以使用notepad..嘿嘿。弹出框的组成结构: 1.一个页面遮罩层。 2.一个di…

那些你从未见过的神奇物理化学实验,今天全给你整理了!

全世界只有3.14 % 的人关注了爆炸吧知识1.电荷吸引水流2.比空气重的六氟化硫六氟化硫(SF6),法国两位化学家Moissan和Lebeau于1900年合成的人造惰性气体,具有良好的电气绝缘性能及优异的灭弧性能,是一种优于空气和油之间…

Makefile 使用总结

1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些…

学C#的感想

我学C#已经一个学期了,却发现自己对C#的了解只是一点皮毛而已,根本什么都不能做。自己也试过去编写一些写程序,但就是只会那些简单的,一旦遇到复杂点的程序,就是狗咬乌龟—无从下口了。现在回想,都不知道自…

ASP.NET Core使用Middleware有条件地允许访问路由

问题有时,我们可能在Web API中包含一些具有调试功能的请求。比如我们上次的文章中“晕了!这个配置值从哪来的?”使用的获取配置值的功能:endpoints.MapGet("/test2/{key:alpha}", async context > {var key context…

java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bncb,b字符串为asdfgvbbnchb,则…

如何用最低的成本教育出最棒的孩子?看完这些公众号你就知道了

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的,其实是我们对事物的见识与内心的格局,见识的深浅决定人生的深浅,格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号,希望能够给你带…

Virtualbox 无缝整合linux和windows双系统

一直以来,为了使用公司规定的内部通信工具RTX, 而不得不在ubuntu上安装一个virtualbox以运行RTX, 但是由于是运行在虚拟机里面,所以经常不能及时的回复同时的消息,而造成沟通的延迟。 所以就想着,能不能及时的在ubuntu上面看到…

archlinux yaourt安装 以及出错细节 database file for archlinuxfr does not exist.

archlinux yaourt安装 但一直报错如下: :: Synchronizing package databases... core is up to date   extra is up to date   community is up to date  error: failed retrieving file archlinuxfr.db from repo.archlinuxcn.org : The requested URL …

WCF分布式开发常见错误(10):套接字连接中断,The socket connection was aborted

(使用Windows Service作为宿主的时候也会出现这样的情况,搜索的) 我们这里是自定义托管宿主,在进行WCF编程开发过程时,使用NetTcpBinding绑定协议,作为通讯协议,可能会引发这样的异常&#xff0…