计算机图形学 | 投影变换

article/2025/10/1 17:29:09

计算机图形学 | 投影变换

  • 计算机图形学 | 投影变换
    • 7.1 有趣的投影
      • 投影的概念
      • 平行投影
        • 正投影
        • 斜投影
      • 透视投影
    • 7.2 规范化的投影变换
      • 观察的要素
      • 观察空间
      • 规范化的投影变换

华中科技大学《计算机图形学》课程

MOOC地址:计算机图形学(HUST)

计算机图形学 | 投影变换

7.1 有趣的投影

投影的概念

观察变换中隐含有一个观察平面。

观察平面(ViewPlane),即投影平面。

在这里插入图片描述

投影方式分为:平行投影和透视投影。

在这里插入图片描述

在这里插入图片描述

平行投影:

在这里插入图片描述

透视投影:

在这里插入图片描述

平行投影

平行投影可分成两类:正投影和斜投影。

在这里插入图片描述

正投影

正投影分为:三视图、正轴测图。

在这里插入图片描述

三视图:

在这里插入图片描述

以投影面不x轴垂直,且在xp处的主视图为例:x’=xp,y’=y,z’=z。

在这里插入图片描述

轴测图:

在这里插入图片描述

当将该平面的法向量方向旋转到x轴,则投影平面为YOZ平面。

在这里插入图片描述

斜投影

常见的斜投影:斜等测和斜二测。

在这里插入图片描述

在这里插入图片描述

透视投影

基于三维齐次坐标的变换。

一点透视:

在这里插入图片描述

透视缩小效应:三维形体透视投影的大小不形体到投影中心的距离成反比。

在这里插入图片描述

不平行于投影面的平行线的投影会汇聚到一个点,这个点称为灭点(VanishingPoint)。

坐标轴方向的平行线在投影面上形成的灭点称作主灭点。

在这里插入图片描述

透视投影按照主灭点个数的分类:

  • 一点透视有一个主灭点,即投影面不一个坐标轴正交,不另外两个坐标轴平行。
  • 两点透视有两个主灭点,即投影面不两个坐标轴相交,不另一个坐标轴平行。
  • 三点透视有三个主灭点,即投影面不三个坐标轴都相交。

在这里插入图片描述

7.2 规范化的投影变换

观察的要素

  • 观察坐标系的位置:取决于视点的位置P、焦点的位置P0和向上的正方向yv

  • 观察方式:平行投影、透视投影。

在这里插入图片描述

在这里插入图片描述

观察空间

观察窗口(ViewWindow),即观察平面上的一个有限区域。

在这里插入图片描述

观察空间:定义了观察窗口后,可以利用窗口边界来定义观察空间。

将观察窗口沿zv轴方向作平移运动,产生的三维形体称为观察空间。

在这里插入图片描述

影响观察空间的要素:

  • 观察窗口的大小
  • 投影方式的不同

正平行投影的观察空间:

在这里插入图片描述

斜平行投影的观察空间:

在这里插入图片描述

透视投影的观察空间:

在这里插入图片描述

有限观察空间又称为裁剪空间,也叫视景体。

以下是丌同投影方式的视景体:

在这里插入图片描述

规范化的投影变换

几何阶段后续的工作:

在这里插入图片描述

观察空间不同,裁剪和屏幕映射的方法不同。

能否有一个规范化的观察空间?

可以!

在这里插入图片描述

定义一个规范化投影空间:

在这里插入图片描述

怎么进行规范化投影变换?

首先考虑平行投影中最简单的正平行投影:平移和比例变化。

在这里插入图片描述

再看斜平行投影:平移和比例变化。

在这里插入图片描述

斜平行投影:错切、平移和比例变化。

在这里插入图片描述

透视投影:平移、比例和错切变化。

在这里插入图片描述

规范化投影空间的过程:矩阵运算

在OpenGL中,投影矩阵的计算只需要调用一个函数:

fovglm::mat4 proj =glm::perspective(45.0f, 1.3f, 0.1f, 100.0f);
  • 第一个参数定义了fov的值,它表示的是视野(Field of View),并且设置了观察空间的大小。对于一个真实的观察效果,它的值经常设置为45.0,但想要看到更多结果你可以设置一个更大的值。
  • 第二个参数设置了宽高比,就是宽度和高度的比例。
  • 第三和第四个参数设置了近截面和远截面的位置。我们经常设置近距离为0.1而远距离设为100.0。所有在近平面和远平面的顶点且处于平截头体内的顶点都会被渲染。

规范化投影变换的目的:便于后续的裁剪和屏幕映射。


http://chatgpt.dhexx.cn/article/YW52HZnf.shtml

相关文章

使用 OpenCV 进行图像投影变换

投影变换(仿射变换) 在数学中,线性变换是将一个向量空间映射到另一个向量空间的函数,通常由矩阵实现。如果映射保留向量加法和标量乘法,则映射被认为是线性变换。 要将线性变换应用于向量(即,一…

Opencv之投影变换

学习资料参考: 张平.《OpenCV算法精解:基于Python与C》.[Z].北京.电子工业出版社.2017. 原理 平面的物体若在三维空间发生了旋转,那么这就是投影变换。平面的物体可以借助二维投影变换进行三维变换模型化得到修正。 处理函数 c中的getPersp…

ArcMap 投影变换

在投影变换之前,首先需要理清出我们拿到的工程数据到底是哪一个投影坐标系,只有清楚是哪一个坐标系才能给我们矢量化出来的数据进行定义投影(如果是当地的投影坐标系,可以查看自定义投影坐标系文章,新建出当地的投影坐…

OpenCV : 投影变换

投影变换 物体在三维空间发生了旋转,叫做投影变换.由于可能出现阴影或遮挡,所以变换后较难复原.如果物体时平面的,就可以通过投影变换物体三维变换进行模型化,这叫做专用的二维投影变换. 矩阵表示: [ x ~ y ~ z ~ ] [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] [ x …

Halcon 第七章『图像的几何变换』◆第2节:投影变换

一、介绍 投影变换也叫透射变换、投影映射。透射变换是将图像投影到一个新的视平面,是一种二维坐标到三维坐标的变换。 透射变换是仿射变换的延续,也可以说仿射变换是透射变换的一种特殊形式。其特殊性在于变换后图像的形状仍然维持原状。投影变换包括的…

投影变换原理和用法

一、定义:投影变换也叫透射变换、投影映射。透射变换是将图像投影到一个新的视平面,是一种二维坐标到三维坐标的变换。 透射变换是仿射变换的延续,也可以说仿射变换是透射变换的一种特殊形式。其特殊性在于变换后图像的形状仍然维持原状。投影…

基于libVLC的视频播放器之四:直接使用libVLC

一.效果 播放本地文件 播放网络url:rtsp://3.84.6.190/vod/mp4:BigBuckBunny_115k.mov 二.实现 既然有VLC-Qt,为什么还要直接调用libVLC呢,因为直接调用会加深对整个播放流程的理解,方便后面修改VLC-Qt源码。

MFC调用vlc动态库libvlc.dll实现简单播放器 中文路径处理

一、简单说明 本文讲解利用MFC调用vlc&#xff08;2.0.0&#xff09;的动态库实现简单的播放器&#xff0c;实现播放、暂停、停止、音量控制、进度控制&#xff0c;支持中文路径等。 VLC 中文路径转码问题<转> 最近用MFC编写调用libVLC的程序时碰到中文路径不能打开的问题…

VLC-Android编译

1.环境 硬核条件----------linux(这里用ubuntu代替)15.5.1 build-15018445 PS&#xff1a;这里安装好虚拟机以后&#xff0c;尽可能分配大内存(8GB起步)&#xff0c;如果电脑本地不允许开这么大的内存给虚拟机&#xff0c;则本博文后面的内容可能帮助不大。 安装好虚拟机后&am…

VLC介绍以及库的使用

VLC原指VideoLAN客户端(VideoLANClient)&#xff0c;是一款开源的、跨平台的、可扩展的、多媒体播放器、流媒体服务器及框架&#xff0c;可播放大多数多媒体文件&#xff0c;以及DVD、音频CD、VCD及各类流媒体协议&#xff0c;现更名为VLC media player&#xff0c;最新版本为2…

LibVLC —— 常用函数解析

函数 ● LIBVLC_API libvlc_instance_t *libvlc_new( int argc , const char *const *argv ); 功能&#xff1a;创建libvlc_instance_t对象。 用法&#xff1a; libvlc_instance_t *VlcInstance libvlc_new(0, nullptr);参数&#xff1a;                具体…

【玩转VLC】--- 基于libvlc写个最简单的播放器

通过【玩转VLC】--- ubuntu下编译vlc 我们已经把vlc编译哦了。生成了一系列的bin和libvlc.so. 接下来我们就用编译好的libvlc.so搞一个最简单的播放器。 我认为vlc的伟大之处有一点就是他并没有把整个播放器写成一个硬生生的bin。而是独立出来个libvlc库&#xff0c;其他的玩…

最简单的基于libVLC的例子:最简单的基于libVLC的推流器

最简单的基于libVLC的例子文章列表&#xff1a; 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器&#xff08;图形界面版&#xff09; 最简单的基于libVLC的例子&#xff1a;最简…

C++调用libVLC播放视频

1、下载libVLC的sdk Index of /pub/videolan/vlc/ 注意下载.7z结尾的 2、Visual Studio建立C的windows控制台项目 3、文件准备 &#xff08;1&#xff09;sdk文件夹解压缩到项目文件夹下 &#xff08;2&#xff09;在Debug下方压缩包内的几个文件 、 4、配置项目属性 注意…

最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)

最简单的基于libVLC的例子文章列表&#xff1a; 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器&#xff08;图形界面版&#xff09; 最简单的基于libVLC的例子&#xff1a;最简…

基于libVLC的视频播放器之二:使用VLC-Qt播放RTSP流

此篇是 使用VLC浏览器插件播放RTSP流的姊妹篇。 一.直接使用libVLC libVLC是VLC media player多媒体框架的核心引擎和接口&#xff0c;开发者使用它能轻松的创建大量具有VLC特性的应用。 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器详细介绍了libVL…

最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器

最简单的基于libVLC的例子文章列表&#xff1a; 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子&#xff1a;最简单的基于libVLC的视频播放器&#xff08;图形界面版&#xff09; 最简单的基于libVLC的例子&#xff1a;最简…

用VLC开发视频播放器/组件(两种方式:libVLC / VLC-Qt)

测试环境 MSVC-2015Qt 5.14.2QCreator 1. libVLC&#xff08;关键步骤&#xff09; 参考&#xff1a;心流剑 libVLC 各版本 下载链接 我的下载版本为&#xff1a;3.0.11 sdk/lib文件夹目录 qmake vlc 部分的配置&#xff08;路径根据自己的修改&#xff09;只需要&#…

idea如何取消debug所有断点

1、debug模式下&#xff0c;在idea左下方找到【View Breakpoints】按钮或者直接按【CtrlShiftF8】快捷键&#xff0c;如下图&#xff1a; 2、在左侧窗口中&#xff0c;点击【Java Line Breakpoints】前方的全选框&#xff0c;如下图&#xff1a; 3、取消 【Java Line Breakp…

Idea断点for循环调试

前言 作为一个开发&#xff0c;最高兴和痛苦的事情就是排查问题&#xff0c;调试代码解决问题&#xff0c;掌握一些技巧可以提升效率&#xff0c;今天就讲讲for循环断点调试的技巧for循环断点调试 操作步骤&#xff1a; 1.在断点调试处加断点 2.点击断点处&#xff0c;鼠标右击…