滑轨屏内容对齐墙面:物理坐标到像素的映射做法
连续定位的滑轨屏,观众期待的效果是”屏像一扇窗,推到哪就透出哪段墙后的画面”。窗框和墙对不上,哪怕只差一点,观众也会觉得这块屏在”飘”。对齐不是调出来的,是算出来的。
一块”总差半拍”的屏
常见情形是这样的:一面长墙上印着连续的山水长卷,中间一段留白,由滑轨屏补上动态画面。设计意图是屏推到哪,屏上的山脊线就和两侧墙面的山脊线连成一条。
调试时工程师拿着鼠标一点一点拖偏移量,在墙中间那一段调到严丝合缝,大家都挺满意。结果推到两端一看,左端屏上的画面偏左,右端又偏右,而且越往两头偏得越多。再换个人快推一把,画面还明显”拖”在屏后面,停下来才慢慢追上。
这里其实叠着三个问题:比例系数不对(所以越远越偏)、零点只在一处对过(所以只有中间准)、没考虑从读位置到出画面的延迟(所以快推会拖)。三个问题各有各的解法,拖偏移量是解决不了的。下面按”先建坐标系、再求系数、然后处理边框和偏移、最后补延迟”的顺序讲。
定位器件本身怎么选,先看滑轨屏编码器怎么选;位置信号怎么进电脑,看编码器接入电脑。本文默认你已经能在软件里拿到一个随屏移动而变化的位置读数。
先建一个”墙面坐标系”
对齐的前提是:墙面设计、定位读数、屏上画面,三方说的是同一套坐标。建议统一成下面这套约定,写进交底文件:
- 原点:定在长卷左端对应的墙面位置,也就是屏走到行程起点时,屏可视区左边缘所在的位置。回零开关装在哪都行,它和原点之间的距离在标定时量出来,写进软件作为固定偏移;
- 方向:从原点指向另一端为正方向;
- 单位:墙面上用物理长度(毫米),画面里用像素;
- 参考点:屏在轨道上的”位置”,统一指屏可视区的水平中心,而不是小车某个角、也不是编码器滚轮所在处。
最后这一条最容易被忽略。定位器件装在小车上的哪里,完全取决于机械方便;但内容要对齐的是屏的可视区。两者之间差一个固定的偏移量,后面会单独处理。
墙面设计师拿到这套坐标后,要在同一张比例正确的立面图上排图文,所有需要和屏”接上”的元素(山脊线、时间轴、分隔线)都标出它们在墙面坐标系里的位置。这张图就是后面所有计算的依据,也是滑轨电视墙方案里说的那张”底图”。
映射公式:一条直线
屏上画面要表现成一扇窗,意思是:屏可视区里显示的那一块内容,正好是虚拟长卷上”屏现在所在位置”的那一段。所以核心就是把”屏的物理位置”换算成”长卷上的像素偏移”。
这个换算分两步。
第一步:读数 → 物理位置。 定位器件给出的是计数(或电压、或距离),要换成墙面坐标系里的物理位置。对编码器来说,这是一条直线:
物理位置 = 计数 × 每计数距离 + 零点偏移
每计数距离理论上等于滚轮周长 ÷(P/R × 4),但实际安装后滚轮压缩、轮径误差都会让它偏离理论值,所以不要用理论值,要实测标定。
第二步:物理位置 → 像素偏移。 这一步取决于屏的像素密度。假设屏可视区物理宽度为 Ws、水平像素为 W 像素,那么每单位物理长度对应 W ÷ Ws 个像素。长卷要和墙面同比例,长卷上的像素密度也必须等于这个值。于是:
像素偏移 = (物理位置 − 可视区半宽)×(W ÷ Ws)
这里减去可视区半宽,是因为参考点定在可视区中心,而屏幕左边缘在长卷上的起点要往左退半个屏宽。
合起来仍是一条直线:像素偏移 = 计数 × k + b。k 和 b 两个数定下来,整块屏就对齐了。前面那块”两端越偏越多”的屏,就是 k 不对;“只有中间准”,是只调了 b 没调 k。
两点标定:求 k 和 b
一条直线由两个点确定,所以标定只需要两个已知位置:
- 在墙面靠近两端处各选一个标记点(比如墙面图文里的两条竖向分隔线),它们在墙面坐标系里的位置从立面图上读出来,分别记为 P1、P2;
- 把屏推到可视区中心对准第一个标记点,记下此时的读数 C1;再推到第二个标记点,记下读数 C2;
- 每计数距离 = (P2 − P1)÷(C2 − C1),零点偏移 = P1 − C1 × 每计数距离。
两个标记点要尽量拉开距离,越远,读数误差对系数的影响越小。对准的时候别凭肉眼看屏边框,可以在屏上临时显示一条竖向的中心细线,对准墙上的标记线再记录。
如果算出来的每计数距离是负数,说明编码器的计数方向和你定义的正方向相反。规格书会专门提醒注意安装方向和”哪个转向计数增加”,处理方法是在软件里把计数取反,或者对调 A、B 两相接线,不要在映射公式里靠手调凑。
长轨道上如果发现两点标定后中段仍有系统性偏差,说明全程不是一条理想直线(比如滚轮在某一段压紧力不同),这时要改成分段线性:多设几个标记点,每两个相邻点之间各求一组系数。分段标定和中途校正点的做法,详见滑轨定位精度怎么调整。
屏边框和安装偏移
可视区不等于屏的外框
屏的外框比可视区宽一圈边框。墙面图文要”接住”的是可视区的边缘,而不是外框。所以:
- 映射公式里的 Ws 必须是可视区的物理宽度,按屏的规格书或实测为准,不能用外框尺寸;
- 墙面上紧挨屏停靠区域的图文,要预留出边框遮挡的那一条,否则画面和墙面之间会”断”一截;
- 如果想让画面和墙面看起来真正连续,可以在内容上把边框那一段”藏进去”——长卷在对应位置跳过边框宽度那部分内容,模拟窗框挡住了景物。这属于设计选择,要和甲方先说清楚。
定位参考点和屏中心不重合
前面说过,编码器(或拉线挂点、测距反射面)装在小车上的位置,和屏可视区中心之间有一个固定的水平偏移 d。两点标定时如果是用”屏中心对准标记点”来记读数,这个偏移已经被吸收进零点偏移 b 里了,不用单独处理。
但有一种情况会出问题:换屏。新屏的 VESA 孔位和可视区中心的相对位置可能跟旧屏不同,屏装上去以后可视区中心平移了,所有内容会整体错开。所以换屏、拆装屏之后必须重新做一次标定,这一条要写进运维手册。
垂直方向同样要对
水平对齐大家都会盯,垂直方向常被忽略。屏装在滑车上的高度决定了可视区上下边缘落在墙面的哪个高度。墙面上的水平元素(地平线、时间轴线)如果要穿过屏,内容里对应元素的像素高度必须按同样的像素密度(H 像素对应可视区物理高度 Hs)去排。安装时屏装高或装低了,就只能调内容的垂直偏移去凑,所以施工交底要把屏的安装高度定死。
快推会拖:跟随延迟怎么补
从定位器件产生读数,到画面真正显示在屏上,中间经过:计数板采样、串口发送、软件读取和解析、渲染、显示器本身的显示延迟。每一环都不长,但加起来,屏快速移动时画面就会明显落后于屏的实际位置,停下后才追上。
补偿思路是”预测”:软件根据最近几次读数算出当前速度,把位置往运动方向多推一点再去渲染:
显示用位置 = 当前读数位置 + 速度 × 系统延迟
系统延迟没法从规格书上直接查到,要实测:让屏匀速移动,用高速拍摄同时拍下屏上的中心细线和墙上的标记线,看画面落后多少,再反推延迟,逐步调这个参数直到快推时画面也不拖。
预测要有度。观众推屏常常是猛推一把就松手、或者推到一半突然停下,预测过头会出现”画面冲过头再弹回来”。常用做法是速度低于某个阈值时关掉预测,屏基本停稳时直接用原始读数。速度阈值和停稳判定的思路,和滑轨屏触发区间与防抖里讲的是一套。
示意伪代码
下面是一个把读数映射成长卷偏移的示意,只表达思路,参数都用符号:
# 标定得到的两组数据
P1, C1 = 标记点1的墙面位置, 该处读数
P2, C2 = 标记点2的墙面位置, 该处读数
mm_per_count = (P2 - P1) / (C2 - C1)
zero_offset = P1 - C1 * mm_per_count
# 屏参数(以规格书或实测为准)
Ws = 可视区物理宽度
W = 水平像素数
px_per_mm = W / Ws
def 读数转偏移(count, speed):
pos = count * mm_per_count + zero_offset # 物理位置(可视区中心)
if abs(speed) > 预测启用阈值:
pos = pos + speed * 系统延迟 # 跟随延迟补偿
pos = 限制在(pos, 行程最小值, 行程最大值) # 超出行程的读数不信任
left_px = (pos - Ws / 2) * px_per_mm # 屏左边缘在长卷上的像素位置
return left_px
最后那一步”限制在行程范围内”很重要:读数跳变或者回零前的临时读数,都可能给出一个轨道上根本不存在的位置,直接拿去渲染会让画面瞬间闪到长卷的另一头。怎么把这段逻辑放进完整的播放程序里,见滑轨屏软件开发:按位置播放的三种实现。
对不齐的排查表
| 现象 | 最可能的原因 | 怎么确认 | 怎么修 |
|---|---|---|---|
| 中间准、两端越偏越多 | 比例系数 k 不对 | 在两端标记点分别看偏差方向是否相反 | 重做两点标定,别用理论系数 |
| 全程整体偏一截 | 零点偏移 b 不对,或换过屏 | 各处偏差大小相同、方向相同 | 重新标定零点;换屏后必须重标 |
| 某一段偏、其他段准 | 该段滚轮打滑或压紧力不同 | 分段记录偏差,看是否集中在某段 | 改分段线性标定,查该段轨道面 |
| 推一个来回后偏差变大 | 累积误差,打滑或丢计数 | 回零后偏差是否消失 | 加中途校正点,查编码器接线 |
| 快推时画面拖在后面 | 系统延迟未补偿 | 慢推准、快推不准 | 加上速度预测,实测延迟参数 |
| 停下时画面过冲回弹 | 预测过度 | 急停时出现 | 调低预测增益,低速时关预测 |
| 画面和墙之间断一截 | 用了外框宽度或没处理边框 | 对照可视区实测宽度 | 映射改用可视区宽度,内容处理边框 |
| 推屏方向和画面移动相反 | 计数方向与坐标方向相反 | 系数算出来是负数 | 软件取反或对调 A、B 相 |
跑了一段时间才出现的漂移,按滑轨屏卡顿与定位漂移排查逐项查。
常见问题
点位感应的滑轨屏也需要做坐标映射吗? 基本不需要。离散点位方案是屏到点触发一段独立视频,画面本身不随位置滚动,只要屏停靠时对准展位即可。坐标映射是连续定位、画面随屏滚动时才必须做的事。两种方案的取舍见滑轨屏定位方式对比。
标定一次就一劳永逸吗? 不是。滚轮磨损会让每计数距离慢慢变化,换屏、拆装滑车会改变零点。建议把两点标定做成软件里的一个维护功能,运维人员按提示推屏到两个标记点、点确认即可重算,不需要改代码。
长卷内容是不是要按屏的分辨率重新做? 是的。长卷的像素密度必须和屏可视区的像素密度一致,墙面和画面才能同比例。长卷总宽度怎么由行程推出来、太大了怎么切片,见滑轨屏内容制作。
延伸阅读
映射用的长卷怎么做、按什么规格交付,看滑轨屏内容制作;定位读数怎么从编码器进到电脑,看编码器接入电脑;标定、回零和分段校正的细节,看滑轨定位精度怎么调整;整套系统的软硬件链路,看互动滑轨屏系统组成;滑轨屏的基本原理,回到滑轨屏原理百科。器件层面,旋转编码器图鉴讲了 A、B 两相和计数方向。
参考资料:欧姆龙 E6B2-C 增量式旋转编码器规格书(PDF,英文,含 A/B 相位与计数方向说明);CSDN:《滑轨电视互动原理》技术博文(离散点位与连续定位的区别)。
滑轨屏画面和墙面总对不上,或者方案阶段想先把坐标系定清楚?把墙面立面图、屏型号和定位方式发给我们,联系我们一起过一遍。更多滑轨屏的结构、定位与内容做法,逛滑轨屏技术方案。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。