今天端午节,中午烙了好久没吃到的韭菜馅儿盒子,晚上尝试自己包了粽子,虽然翻车了,还是挺开心的,啊,好困~
obs中有obs_sceneitem_set_info函数用来设置场景项信息,这个转换信息就是今天学习的这个数据结构。
官方帮助手册上的信息:
Scene Item Transform Structure (obs_transform_info)¶
struct obs_transform_info
Scene item transform structure.
struct vec2 obs_transform_info.pos
Position.
float obs_transform_info.rot
Rotation (degrees).
struct vec2 obs_transform_info.scale
Scale.
uint32_t obs_transform_info.alignment
The alignment of the scene item relative to its position.
Can be 0 or a bitwise OR combination of one of the following values:
OBS_ALIGN_CENTER
OBS_ALIGN_LEFT
OBS_ALIGN_RIGHT
OBS_ALIGN_TOP
OBS_ALIGN_BOTTOM
enum obs_bounds_type obs_transform_info.bounds_type
Can be one of the following values:
OBS_BOUNDS_NONE - No bounding box
OBS_BOUNDS_STRETCH - Stretch to the bounding box without preserving aspect ratio
OBS_BOUNDS_SCALE_INNER - Scales with aspect ratio to inner bounding box rectangle
OBS_BOUNDS_SCALE_OUTER - Scales with aspect ratio to outer bounding box rectangle
OBS_BOUNDS_SCALE_TO_WIDTH - Scales with aspect ratio to the bounding box width
OBS_BOUNDS_SCALE_TO_HEIGHT - Scales with aspect ratio to the bounding box height
OBS_BOUNDS_MAX_ONLY - Scales with aspect ratio, but only to the size of the source maximum
uint32_t obs_transform_info.bounds_alignment
The alignment of the source within the bounding box.
Can be 0 or a bitwise OR combination of one of the following values:
OBS_ALIGN_CENTER
OBS_ALIGN_LEFT
OBS_ALIGN_RIGHT
OBS_ALIGN_TOP
OBS_ALIGN_BOTTOM
struct vec2 obs_transform_info.bounds
The bounding box (if a bounding box is enabled).
.pos,.bounds好理解,即场景项在输出output中占据的矩阵位置,当然可能不是实际全都填充上。
.alignment咋眼看上去不好理解,它描述的其实是.pos这个起始位置相对于场景项的位置,最简单的一种位置关系是left | top,示意图如下:
如果设置这个值为left | bottom,那么位置就变成了这样:
那么sceneItem就有看不到的可能。
.rot即旋转角度
.bounds_type 和 .bounds_alignment即通常意义上的填充规则的语义了。当源的宽高比例和这个矩形的宽高比例不一致时,这两个选项就有了意义。
举两个例子吧。假如output和信号源的分辨率都是1280*720,但是场景设置的信号源rect是(0,0,1280,720*3/4),那么当
.bounds_type为scale_to_height,.bounds_alignment为right时,布局如下图:
stretch是直接不保持比例进行填充。
.bounds_type为scale_to_width,.bounds_alignment为bottom时,布局如下图:
即信号源有一部分是处于output之上看不到的。此时如果设置alignment为top的话,信号源会充满整个output;center则是这两种极端情况的中间位置。
难理解的情况应该是都说了,inner,outer和max_only的情况下次再说吧。