前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >射影几何变换的基本原理

射影几何变换的基本原理

作者头像
Jean
发布于 2020-11-06 00:23:25
发布于 2020-11-06 00:23:25
2K0
举报
文章被收录于专栏:Web行业观察Web行业观察

贴花的几何变换

目录

前情提要几何变换:平移/旋转/缩放平移:以“我”为起点的射线追踪旋转:法线贴花、暴露翻滚角缩放:线性增长的相对速率蓝图入口细节优化演示

  1. 前情提要
  2. 几何变换:平移/旋转/缩放
  3. 平移:以“我”为起点的射线追踪
  4. 旋转:法线贴花、暴露翻滚角
  5. 缩放:线性增长的相对速率
  6. 蓝图入口
  7. 细节优化
  8. 演示

前情提要

在上一篇文章中我完成了整个流出的前半部分:让用户从电脑中选择图片,自动制作成UE4贴花,并贴到地面上。本文讨论如何在非地面的平面/曲面上动态贴贴花。3D引擎中的贴花(decal)技术是以射影几何学为基础的投影材质,相比于表面材质(surface material),轻量的贴花材质在特定场合下有更好的性能,比如贴海报、静态液体、局部纹理,本文讨论贴花后半部分关于空间几何变换的基本原理。

几何变换:平移/旋转/缩放

无论在二维空间还是三维空间,物体的几何变换都围绕着平移、旋转、缩放而展开,只是3维空间需要考虑空间直角坐标系(笛卡尔坐标系)x、y、z三个维度的变换值,其中由系统自动设定的维度值我们称作"隐含维度",需要由用户操作决定的维度值称作"显式维度"。总共3*3=9个维度变量中,由用户输入决定的只有4个,剩下5个变量由系统自动维护,下面我们来一一解释这个原则。

单位

几何变换

隐含维度

显式维度

平移

单位1/厘米

相对于坐标原点的x/y/z轴偏量

1

2

旋转

角度/弧度

以主视角和地心为基准的俯仰角、偏航角、翻滚角

2

1

缩放

倍数/百分比

3个直角分量相对于原始尺寸的增量

2

1

平移:以“我”为起点的射线追踪

射线追踪(line trace)是物理引擎中重要的组成部分,多数射击游戏都需要锁定射线命中的物体本体,虚幻引擎提供了射线追踪的良好支持。在我们动态贴画的场景中,希望能实现这样的效果:当用户指定屏幕上的某一点就能于这一点所在的物体表面贴上一层贴花。这个需求抽象出来就是要利用射线追踪技术,以主视摄像机为起点,摄像机的朝向为方向向量发出射线,再根据撞击点的法线确定贴花方向。

鼠标平移作为最常用的二维连续型输入设备,总是被用来控制人物/镜头的朝向(单位球面),我们的贴花项目中也不例外,让鼠标来决定贴花平移的这2个维度,剩下一个维度自然由射线的长度决定,所以"隐含维度"只有1个。

旋转:法线贴花、暴露翻滚角

法线贴图本身指利用图片的alpha通道存储像素的第三维度,通过人眼对色光的抽象能力模拟出图片的立体效果。法线贴花即根据射线追踪的撞击点所在平面的切线的法线向量(二维向量)决定贴花的俯仰角(pitch)和偏航角(yaw)。虽然空间向量是(x,y,z)三个维度,但方向向量由于模长始终为1,即X^2+Y^2+Z^2=1,z可以写成(1-X^2-Y^2)^0.5,所以终点位于单位球面的方向向量实质上是2维向量。

但是贴花actor的旋转是三维的,而法线只暴露了其中2个维度,即俯仰角和偏航角,剩下的翻滚角(roll)只能让用户来决定。飞行游戏中(直升机除外),键盘控制规则一般会遵守这个默认习惯:W/S键控制飞机俯仰,Z/C键控制飞机偏航,A/D键控制飞机翻滚。我们也可以采用这种模式来操作贴花围绕法线的翻滚角。

缩放:线性增长的相对速率

解决了平移和旋转,缩放就简单多了,虽然缩放是3个维度的考量,但由于贴花本身是一张图片,投影深度(即主视轴)可以写死一个固定值(比如400),还剩剩下长和宽2个维度,又因为大多情况下需要锁定纵横比,所以只剩下1个维度暴露给用户操作,这里推荐使用鼠标滚轮来输入这个线性变量。

关于主轴缩放的速度,不建议使用绝对速度,而应该使用相对速度,简单地说,就是缩放速度和物体尺寸成正比。因为这种设计模式符合用户习惯:我们在手机端翻滚很长的网页时,手指滑动速度并不和页面滚动速度并一致,而是后者的加速度。同理,每次缩放的增量不是一个固定值而是原来尺寸的固定倍数(比如1.1)。除此之外,缩放需要有边界以免失控,比如上限设为1000%,下限设为5%。

蓝图入口

蓝图入口是所有代码的索引,本文展示所有蓝图/C++分支的入口,代码明细存储在额外的仓库,就不展示了。

  • Event BeginPlay:初始化设置
  • Event Tick:计算每一帧的射线追踪
  • Right Mouse Button:鼠标右键上传新的图片
  • Space Bar:空格键黏贴新的贴图
  • Mouse Wheel Up:鼠标前滚放大
  • Mouse Wheel Down:鼠标后滚缩小
  • InputAxis Rotate:顺时针/逆时针旋转(翻滚)
  • InputAxis Accelerate:调整移动速度

细节优化

  • 贴花模型:平移旋转缩放的对象是可视化模型,最终确定下来后才复制一份静态贴花。
  • 贴花优先级:在同一切面上不同的贴花之间的展示优先级应该遵守“后来者居上”的原则。
  • 实时状态:使用Widget制作UI界面展示当前的状态(如旋转角和缩放比)以及鼠标/键盘的操作提示。
  • 射线长度上限:设定射线追踪的长度上限(如10000)以避免无穷远点和足够远点,节省资源。
  • 输入模式切换:贴花的输入模式由于没有重力限制,不同于普通的输入模式(如人物行走),需要需要在2者间做好合适的切换。

演示

<完>

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebHub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数字孪生:第三人称鼠标操作
最近制作了能开箱即用的UE5鼠标组件,直接拷入一个文件,再拖到场景中,就能使用了,可以控制相机的平移、旋转、缩放
Jean
2022/08/31
1.1K0
图像中的几何变换
一. 图像几何变换概述 图像几何变换是指用数学建模的方法来描述图像位置、大小、形状等变化的方法。在实际场景拍摄到的一幅图像,如果画面过大或过小,都需要进行缩小或放大。如果拍摄时景物与摄像头不成相互平行关系的时候,会发生一些几何畸变,例如会把一个正方形拍摄成一个梯形等。这就需要进行一定的畸变校正。在进行目标物的匹配时,需要对图像进行旋转、平移等处理。在进行三维景物显示时,需要进行三维到二维平面的投影建模。因此,图像几何变换是图像处理及分析的基础。 二. 几何变换基础 1. 齐次坐标: 齐次坐标表示是计算机图形
智能算法
2018/04/02
2.3K0
图像中的几何变换
第4章-变换-4.2-特殊矩阵变换和运算
在本节中,将介绍和导出对实时图形必不可少的几个矩阵变换和运算。首先,我们介绍了欧拉变换(连同它的参数提取),这是一种描述方向的直观方式。然后我们谈到从单个矩阵中反演一组基本变换。最后,导出了一种方法,可以绕任意轴旋转实体。
charlee44
2022/01/04
3.7K0
第4章-变换-4.2-特殊矩阵变换和运算
基于先验时间一致性车道线的IPM相机外参标定
文章:Online Extrinsic Camera Calibration for Temporally Consistent IPM Using Lane Boundary Observations with a Lane Width Prior
点云PCL博主
2022/02/10
2K0
基于先验时间一致性车道线的IPM相机外参标定
第4章代码-图形几何变换
目录 4.4 编程实例——三角形与矩形变换及动画 4.4.1 自定义矩阵变换实例——三角形变换 4.4.2 OpenGL几何变换实例——矩形变换 4.4.3 变换应用实例——正方形旋转动画 4.4
步行者08
2020/09/19
7220
第4章-变换-4.1-基础变换
本节介绍最基本的变换,例如平移、旋转、缩放、剪切、变换级联、刚体变换、法线(normal)变换(不太normal)和逆计算。对于有经验的读者,它可以作为简单变换的参考手册,对于新手,它可以作为对该主题的介绍。这些材料是本章其余部分和本书其他章节的必要背景。我们从最简单的变换开始——平移。
charlee44
2021/12/21
4.2K0
第4章-变换-4.1-基础变换
实验4 二维几何变换
根据示范代码1,使用OpenGL平移、旋转、缩放变换函数来改写代码实现所要求的功能。示范代码1的代码运行结果为图1。
步行者08
2019/02/25
1.1K0
实验3 OpenGL几何变换
(1)阅读实验原理,运行示范实验代码,掌握OpenGL程序平移、旋转、缩放变换的方法;
步行者08
2018/10/09
1.3K0
如何通过图像消失点计算相机的位姿?
本文主要是个人在学习过程中的笔记和总结,如有错误欢迎留言指出。也欢迎大家能够通过我的邮箱与博主进行交流或者分享一些文章和技术博客。
点云PCL博主
2022/01/27
4.9K0
如何通过图像消失点计算相机的位姿?
【计算机视觉】二、图像形成:2、几何基元和几何变换:2D变换
  几何基元是计算机图形学中最基本的图形对象,它们是构建更复杂图形的基础单元。常见的几何基元包括:
Qomolangma
2024/07/30
3440
【计算机视觉】二、图像形成:2、几何基元和几何变换:2D变换
CG005计算机图形学几何变换
几何变换(geometric transformation) :应用于对象几何描述并改变它的位置 方向或者大小的操作称之为几何变换,有时又称为几何变换。
上善若水.夏
2018/09/28
6180
CG005计算机图形学几何变换
实验5 OpenGL二维几何变换
(1)阅读实验原理,掌握OpenGL程序平移、旋转、缩放变换的方法。 (2)根据示范代码,完成实验作业。
步行者08
2020/10/27
2.6K2
实验5 OpenGL二维几何变换
关于飞机姿态角的学习分享
飞机姿态角是按欧拉概念定义的,故亦称欧拉角。飞机姿态角是由机体坐标系与地理坐标系之间的关系确定的,用航向角、俯仰角和横滚角三个欧拉角表示。
用户7053485
2020/03/19
7.3K0
变换(Transform)(1)-向量、矩阵、坐标系与基本变换
如果要将右侧坐标系变为左侧那种,我们只需要做一些旋转操作,将右侧坐标系顺时针旋转180度,再将整个坐标系水平翻转即可。我们可以通过一定的旋转操作将两个坐标系重合,那么我们就称它们具有相同的旋向性(handedness)。
Zero Two
2024/07/21
5600
4.4.2 OpenGL几何变换编程实例
/* 三维旋转变换,参数:旋转轴(由点p1和p2定义)和旋转角度(thetaDegrees)*/
步行者08
2018/10/09
7840
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
  图像几何变换又称为图像空间变换,它将一副图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换就是确定这种空间映射关系,以及映射过程中的变化参数。图像的几何变换改变了像素的空间位置,建立一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现下面两种计算:
vv彭
2020/10/27
4.1K0
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换
    


OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
【GAMES101】三维变换
games101的第四节课讲了三维变换和观察变换,我们这里先记录一下三维变换的知识,后面再讲观察变换
叶茂林
2023/12/08
2300
【GAMES101】三维变换
几何变换
窗口: 世界坐标系中要显示的区域。 视区: 窗口映射到显示器上的区域。 二维几何变换: 齐次方程如下图所示  可将齐次方程分为四部分 T1 :线性变换(包括比例,旋转,对称,错切等) T2 :投透视影
用户2434869
2018/09/12
4290
几何变换
8_姿态的其他描述及一般坐标系映射
前面说的用3×3矩阵矩阵描述姿态,9个元素,6个约束条件,实际上只有3个独立元素。即用3个独立元素即可描述机器人姿态。常用的有RPY角,欧拉角和四元数。
用户5908113
2024/02/22
3110
8_姿态的其他描述及一般坐标系映射
CG实验2 二维几何变换
请参考教材博客有关WebGL变换文章,具体见:http://blog.csdn.net/wpxu08
步行者08
2018/10/09
4480
推荐阅读
相关推荐
数字孪生:第三人称鼠标操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档