投影变换与视口变换

一些说明:

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…

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

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

Android中View绘制流程

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

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

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

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

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

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

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

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

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

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

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

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

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

Virtualbox 无缝整合linux和windows双系统

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

聊一聊对外API接口的存活检查可以怎么做

背景 公司内部的API接口一般会分为两大类,一类是直接暴露在公网可以访问的,一类是只能在局域网内访问的。暴露在公网的一般就是业务网关以及一些和第三方公司有着某些合作,从而进行数据交互的接口。检查API接口是否存活,第一反应应…

各种机械原理动态图,看完脑洞大开,绝对涨姿势!

全世界只有3.14 % 的人关注了爆炸吧知识1.钥匙开锁2.撬锁3.汽车换挡4.手枪上膛发射5.炮弹发射原理6.手雷爆炸7.洗衣机8.缝纫机9.心脏10. 近视眼手术:原理其实很简单,就是把角膜削成一个“隐形眼镜”。11.零钱分类12.吹号转载来源:物理好教师部…

CSharp设计模式读书笔记(10):装饰模式(学习难度:★★★☆☆,使用频率:★★★☆☆)...

装饰模式(Decorator Pattern): 动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。 模式角色与结构: 示例代码: using System; using System.Collections.Generic; using Syste…

ShardingCore 如何呈现“完美”分表

这篇文章是我针对efcore的分表的简单介绍,如果您有以下需求那么可以自己选择是否使用本框架,本框架将一直持续更新下去,并且免费开源为.net生态做贡献,如果您觉得不错那么请帮忙点个star谢谢,框架地址[sharding-core](https://github.com/xuejmnet/shard…

使用javascript oop开发滑动(slide) 菜单控件

这里使用原生的javascript,用面向对象的方式创建一个容易维护使用方便的滑动菜单,调用方式如下:var$sliding document.getElementById("silding");vars1 newSliding();s1.commands $sliding.getElementsByTagName("dt");…

他毕业于北师大,编写了我国首套数学教材,陈景润华罗庚都崇拜他

全世界只有3.14 % 的人关注了爆炸吧知识要说起我国著名的数学家,很多人会想到陈景润、华罗庚等人,这些大数学家为我国数学研究做出了卓越贡献,也深深影响了很多人。那么,像陈景润、华罗庚这些大数学家,他们学习数学有受…

用多媒体库 Bass.dll 播放 mp3 [8] - 实时显示左右声道的峰值

为什么80%的码农都做不了架构师?>>> 本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, ComCtrls;typeTForm1 class(TForm)OpenDialog1: TOpe…

最近看了两本低代码的书

月初写了一篇《你真的了解低代码平台吗?》,介绍了下我对低代码产品的一些认识,随后有朋友送了我两本华章出版的关于低代码的书:明道云的《零代码实战》和微软的《实战低代码》,目前市面上也就这两本关于低代码的书。因…