UMG的Space坐标系概念问题

1. UMG蓝图节点中提供了以下工具函数:

(1) Screen To Viewport

(2) Screen To Absolute

(3) Screen To Local

那么可以理解为,上述3个蓝图节点是一种Space空间坐标系转换操作,那么问题来了:

- 什么是Screen Space?原点是哪里?该Space的Box范围区域是否包含Windows Titlebar?

- 什么是Viewport Space?原点是哪里?该Space的Box范围区域是否包含Windows Titlebar?

- 什么是Absolute Space?原点是哪里?

- 什么是Local Space?原点在哪里?(这个我知道是控件左上角)

- 另外如果Screen Space和Viewport Space的Box范围区域是相同的,那么他们的区别是什么?

2. GetPaintSpaceGeometry(似乎对应AllottedGeometry)与GetTickSpaceGeometry(似乎对应DesktopGeometry)的区别?什么时候该用哪个?

3. 对于一个UWidget的FGeometry(也就是AllottedGeometry/DesktopGeometry)可获得关于Widget的2种主要坐标:LocalSize与AbsoluteSize哪一种数值会受到窗口缩放影响?

下面这个问题,是上述问题我概念不清楚导致不知道。比如一个控件如果覆盖/绑定On Mouse Move函数, 那么Mouse Event->GetScreenSpacePosition可以获得鼠标的Screen Space Position坐标。那么这个Screen Space Position数值会受到窗口缩放影响么?如果把它转为Viewport的坐标(通过Screen To Viewport节点)数值还会受到窗口缩放影响么?

[Image Removed]

您好,跟了一下代码

1.

local space是每一个Widget虚拟的空间,是在设计页面设计的时候填入的大小

Viewport space 原点是​渲染界面的左上角位置,不包含title bar

screen space 是以 ​scale 为 1 的 viewport 空间,不包含title bar,例如scale为0.5时,(0,0)screen = (0,0)viewport ,(100,100)screen = (200,200)viewport

abs space是指屏幕上的位置​,包含title bar。例如在窗口最大化的情况下,视窗左上角的abs position是(0,32)32是titlebar的宽度,原点为显示器的左上角

2.

GetPaintSpaceGeometry返回的是“布局完成后”真正分给该控件的几何体,尺寸已包含 DPI 缩放,也受渲染变换(RenderTransform)影响。

GetTickSpaceGeometry返回的是“逻辑桌面”上的几何体,用于输入、命中检测、拖拽。原点始终相对于桌面左上角,方便跨控件比较。

3.

LocalSize:控件在本地空间中的尺寸,不受窗口缩放、RenderTransform 影响。

absoluteSize:TickSpaceGeometry 里的 Size,已乘以全局 DPIScale,因此窗口拖动到高 DPI 显示器或用户 Ctrl+滚轮缩放界面时,该值会变大/变小。

为了更好的便于理解概念,我们先约定一些非UE内的额外术语吧:

1. Monitor Space是显示器(可多个显示器拼凑起来)的空间坐标系,原点在显示器左上角

-------------------------------------------------------------------------------------------

继续追问先前问题

需要确认一下的我的理解是否正确的部分:

1. Viewport Space你提到是以渲染界面左上角位置。我想确认一下渲染界面的范围,就是指就是窗口化下时的windows窗口(不包含titlebar)?我理解的对么?

2. Absolute Space似乎就是我们显示器Monitor Space?我理解的对么

仍然存在一些问题的追问:

1. Viewport的Scale是指窗口缩放对吧?那么它Scale=1.0的大小时的基础默认viewport size是哪里设置呢?是通过项目设置里的DPI Curve=1.0的位置么?我不太确定

2. Screen to Absolute节点,当开启Include Window Position=true的输出值任然存在疑惑,以下2个运行模式时会出现不同的结果,哪个是正确的?

[Image Removed]PIE---new Editor window模式时。Screen(0,0)--->Absolute(3,35)

[Image Removed]Standalone Game模式时。Screen(0,0)--->Absolute(0,0)

[Image Removed]

您好,Local是以某个SWidget的左上角为原点的坐标系,比如一个Local坐标50,30,代表以某个SWidget左上角为原点,向右50和向下30。Absolute是指在某个SWindow的左上角为原点的坐标系,LocalToAbsolute就是从控件坐标系变换到Window坐标系,如果你使用Get Viewpoint Widget Geometry这个蓝图节点,那就会将坐标转换到Viewport下的坐标。而Screen Position是基于显示器的位置,通常是操作系统返回的坐标,一般也是以左上角为原点。我想问下您具体想实现什么效果,这样我可以根据您的需要给出合理的解决方案。