OpenGL(十九) gluOrtho2D、glViewport、glutInitWindowSize区别与关系
gluOrtho2D定义剪裁面,通过正交投影,把景物(模型)按照1:1的比例绘制到一个剪裁面上,相当于对世界坐标窗口的一个截取。
glViewport定义视口,即视见窗口,是从世界坐标系窗口到屏幕坐标系窗口的映射,决定了gluOrtho2D定义的剪裁main如何映射到屏幕上,通过调节glViewport的参数, 可以调节模型在屏幕窗口上的缩放和显示位置。
glutInitWindowSize定义屏幕上显示窗口的大小,视口定义了剪裁面在整个窗口上的显示区域和位置,默认情况下视口参数定义的是跟整个窗口一致的,即全窗口显示,通过设置视口,可以设定模型在窗口的哪一个区域显示。
通俗一点说,gluOrtho2D定义了显示的内容,glutInitWindowSize定义了显示窗口的大小,glViewport定义了模型在显示窗口上的显示方式。
举个例子更能说明它们之间的关系。
#include"freeglut.h"
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0,0,400,400);
glColor3f(1,0,0);
glRectf(0,200,200,400);
glColor3f(0,1,0);
glRectf(200,200,400,400);
glColor3f(0,0,1);
glRectf(0,0,200,200);
glColor3f(0,0,0);
glRectf(200,0,400,200);
glFlush();
}
void Init()
{
glClearColor(1,1,1,1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,400,0,400);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(500, 500);
glutCreateWindow("OpenGL");
Init();
glutDisplayFunc(&myDisplay); //回调函数
glutMainLoop(); //持续显示,当窗口改变会重新绘制图形
return 0;
}
一、默认视口情况下,定义显示窗口的尺寸比gluOrtho2D定义的裁剪尺寸大,画面仍然铺满整个显示窗口,相当于定义视口为整个窗口:
二、定义视口比gluOrtho2D定义的裁剪尺寸小,窗口比gluOrtho2D定义的裁剪尺寸大,显示的模型有缩小的效果:
三、定义视口比gluOrtho2D定义的裁剪尺寸大,模型有放大的效果(由于显示窗口大小限制,没有显示完全):
三、定义视口在显示窗口的右上部分:
三者的基本关系为:
世界坐标系内模型 --> gluOrtho2D按正交投影截取要显示的部分 --> glutInitWindowSize定义显示窗口大小(即定义在屏幕上可作图的显示区域)--> glViewport定义视口(定义世界坐标系的截取窗口在屏幕显示窗口上绘制的大小、位置)
OpenGL(十九) gluOrtho2D、glViewport、glutInitWindowSize区别与关系的更多相关文章
- NeHe OpenGL教程 第三十九课:物理模拟
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十九课:Blt函数
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十九课:粒子系统
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习
JAVA之旅(十九)--ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习 关于数据结构,所讲的知识 ...
- SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)
0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...
- SQL注入之Sqli-labs系列第三十八关、第三十九关,第四十关(堆叠注入)
0x1 堆叠注入讲解 (1)前言 国内有的称为堆查询注入,也有称之为堆叠注入.个人认为称之为堆叠注入更为准确.堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据 ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十九:SDRAM模块② — 多字读写
实验十九:SDRAM模块② — 多字读写 表示19.1 Mode Register的内容. Mode Register A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A ...
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
- 智课雅思词汇---十九、前缀se是什么意思
智课雅思词汇---十九.前缀se是什么意思 一.总结 一句话总结:前缀:se- 表示“分开, 离开, 区别开” 前缀:se- [词根含义]:分离 [同源单词]:secede, secession, s ...
随机推荐
- SetForegroundWindow的正确用法
在SetForegroundWindow之前比较早的时候(比如main函数里)调用一下以下代码: DWORD dwTimeout = -1; SystemParametersInfo(SPI_GETF ...
- Nginx+ 多个Memcached+ 多个Tomcat集群配置来实现 sticky Session
假如有 大于2 台的Tomcat servers,如何实现sticky session特点的高可靠web 服务? 方案设计: 前端使用nginx(最好是淘宝的 tengine)作为we 流量分发器,向 ...
- term- xshell VS securecrt
Xshell使用技巧总结 https://www.cnblogs.com/zhangwuji/p/7155575.html SecureCRT与Xshell简单对比 http://ju.outofme ...
- 设置UIButton的文字显示位置、字体的大小、字体的颜色
btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @"search" forState: UIControlS ...
- 关于如何在Sublime下安装插件
安装插件的两种方式 通过Package Control安装 不能安装 手工安装 安装插件的两种方式 在sublime下安装插件有两种方式,一种是通过package control来进行安装,另一种呢就 ...
- poj2151之概率DP
Check the difficulty of problems Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4403 ...
- mysqlsla slow-query常用用法
mysqlsla -lt slow /data/mysql/testdb2-slow.log -sf -top 20 -sort t_sum > /data/mysql/my_testdb2-s ...
- shell配置java环境变量和批处理配置环境变量
linux配置java环境只需在/etc/profile中添加以下 前提是把jdk解压到/usr/local路径,当然路径可以随便改 export JAVA_HOME=/usr/local/jdk1. ...
- java读取.properties文件乱码
1.config.properties文件写不进中文,写进去都变成了unicode,解决的方法是右键该文件--Properties--Resource--Text file encoding ,选ot ...
- sitecore-CMS
安装sitecore数据库和客户端到本机 (提前先装好数据库和IIS) 安装教程下载:http://download.csdn.net/detail/qq1162195421/6436799 安装 ...