opengl中场景变换|2D与3D互转换

我们生活在一个三维的世界——如果要观察一个物体,我们可以:
1、从不同的位置去观察它。(视图变换)
2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它。(模型变换)
3、如果把物体画下来,我们可以选择:是否需要一种“近大远小”的透视效果。另外,我们可能只希望看到物体的一部分,而不是全部(剪裁)。(投影变换)
4、我们可能希望把整个看到的图形画下来,但它只占据纸张的一部分,而不是全部。(视口变换)

这些,都可以在OpenGL中实现。

墨卡托坐标变换

OPENGL-----3D到2D坐标变换

aaarticlea/png;base64,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" alt="" />

OPENGL-----2D到3D坐标变换

2D到3D的变换其实是3D到2D的逆变换

1.视口变换

使用glViewport来定义视口。其中前两个参数定义了视口的左下脚(0,0表示最左下方),后两个参数分别是宽度和高度。

glViewport负责把视景体截取的图像按照怎样的高和宽显示到屏幕上。

效果如图:

2.透视投影

glMatrixMode(GL_PROJECTION);                      // 设置当前矩阵为投影矩阵。  
glMatrixMode设置当前矩阵模式:
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
glLoadIdentity(); // 重置当前指定的矩阵为单位矩阵 

将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作。

glLoadIdentity该函数的功能是重置当前指定的矩阵为单位矩阵.在语义上,其等同于用单位矩阵调用glLoadMatrix。

    glFrustum(l, r, b, t, n, f);   //将当前矩阵与一个透视矩阵相乘,把当前矩阵转变成透视矩阵  

该函数构造了一个视景体用来将模型进行投影,来裁剪模型,决定模型哪些在视景体里面,哪些在视景体的外面,在视景体之外的就不可见。

注:通常,glMatrixMode和glLoadIdentity一同使用,用于矩阵模式切换。

3.模型变换

    glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScissor(, , iWidth, iHeight);

glScissor裁剪函数,指定裁剪的宽高。

glTranslate*,把当前矩阵和一个表示移动物体的矩阵相乘。三个参数分别表示了在三个坐标上的位移值。

glRotate*,把当前矩阵和一个表示旋转物体的矩阵相乘。物体将绕着(0,0,0)到(x,y,z)的直线以逆时针旋转,参数angle表示旋转的角度。

glScale*,把当前矩阵和一个表示缩放物体的矩阵相乘。x,y,z分别表示在该方向上的缩放比例。

参考网址:

http://blog.csdn.net/a49688448/article/details/17999923

opengl中场景变换|2D与3D互转换(转)的更多相关文章

  1. 2D到3D视频转换 三维重建

    2D到3D视频转换(也称为2D到立体3D转换和立体转换)是将2D(“平面”)胶片转换为3D形式的过程,几乎在所有情况下都是立体声,因此它是创建图像的过程.每个眼睛来自一个2D图像. 内容 1概述 1. ...

  2. css3的2D和3D的转换

    一:2D转换: 通过 CSS3  transform转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 2D移动:translate().使用translate()函数,你可以把元素从原来的位置移 ...

  3. 【opengl】OpenGL中三维物体显示在二维屏幕上显示的变换过程

    转自:http://blog.sina.com.cn/s/blog_957b9fdb0100zesv.html 为了说明在三维物体到二维图象之间,需要经过什么样的变换,我们引入了相机(Camera)模 ...

  4. 开源|如何使用CNN将视频从2D到3D进行自动转换(附源代码)

    http://www.sohu.com/a/128924237_642762 全球人工智能 文章来源:GitHub 作者:Eric Junyuan Xie 它是如何运行的? 在运行代码之前,请先根据官 ...

  5. 单图像三维重建、2D到3D风格迁移和3D DeepDream

    作者:Longway Date:2020-04-25 来源:单图像三维重建.2D到3D风格迁移和3D DeepDream 项目网址:http://hiroharu-kato.com/projects_ ...

  6. OpenGL中的空间变换

    OpenGL中的空间变换          在使用OpenGL的三维虚拟程序中.当我们指定了模型的顶点之后.在屏幕上显示它们之前,一共会发生3种类型的变换:视图变换.模型变换.投影变换.        ...

  7. 使用 GLFW 在 OpenGL 的场景中漫游

    前言 前面已经建立了 OpenGL 框架,加载了 3D 模型,但是还没有在场景中漫游的功能.为了展示 3D 模型,我只是简单地利用变换视图矩阵的方式使模型在视野中旋转.同时,之前的程序连最简单的改变窗 ...

  8. OpenGL 的空间变换(上):矩阵在空间几何中的应用

    在使用 OpenGL 的应用程序中,当我们指定了模型的顶点后,顶点依次会变换到不同的 OpenGL 空间中,最后才会被显示到屏幕上.在变换的过程中,通过使用矩阵,我们更高效地来完成这些变换工作. 本篇 ...

  9. 详解OpenGL中的各种变换(投影变换,模型变换,视图变换)(完)——法线变换

    前面两节内容已经说完了所有的三种变换.也就是说我们现在程序里面既不需要glLookAt(),也不需要gluPerspective(),这些矩阵我们都可以自己写.然后,再用glMultMatrix()来 ...

随机推荐

  1. 吴裕雄 数据挖掘与分析案例实战(8)——Logistic回归分类模型

    import numpy as npimport pandas as pdimport matplotlib.pyplot as plt # 自定义绘制ks曲线的函数def plot_ks(y_tes ...

  2. 数据类型-DataFrame

    数据类型-DataFrame DataFrame是由多个Series数据列组成的表格数据类型,每行Series值都增加了一个共用的索引 既有行索引,又有列索引 行索引,表明不同行,横向索引,叫inde ...

  3. Ansible Playbook Conditionals

    通常,play的结果可能取决于变量的值,facts(有关远程系统的知识)或先前的任务结果. 在某些情况下,变量的值可能取决于其他变量. 此外,可以创建其他组,以根据主机是否与其他条件匹配来管理主机. ...

  4. 虚拟机安装Centos6.5服务器系统

    前言: 工作需要,研究Linux数日,写下此教程,意在给其他初学者参考学习,亦是给自己留作备用.好记性不如烂笔头,毕竟只是偶尔使用,留下教程,以备不时之需. 对于学习研究Linux的新手,个人推荐VM ...

  5. 浅谈QT打印功能实现

    QT作为一款轻量级的集成开发环境,其设计的目标是使开发人员利用QT这个应用程序框架更加快速及轻易的开发应用程序.要达到此目的,要求QT必须能够跨平台,QT能够在32位及64位的Linux,MAC OS ...

  6. Linux之常用命令

    1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...

  7. How to set an Apache Kafka multi node – multi broker cluster【z】

    Set a multi node Apache ZooKeeper cluster On every node of the cluster add the following lines to th ...

  8. DNA拷贝数变异CNV检测——基础概念篇

    DNA拷贝数变异CNV检测——基础概念篇   一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...

  9. 一定要 先删除 sc表 中的 某元组 行,,, 再删除 course表中的 元组行

    一定要  先删除 sc表 中的  某元组   行,,, 再删除  course表中的  元组行 course表 SC表 删除  course表中的  元组行,,出现错误 sc    ---->参 ...

  10. laravel表单提交

    1.控制器->路由->视图 2.视图 3.控制器