视差背景的滚动比例和循环边界怎样配合:四层背景的十次循环滚动·实例15
多层背景可以按不同于镜头的速度移动,营造层次感。重复纹理还需要处理循环边界,否则镜头走过一个纹理宽度时可能出现跳变或空白。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
输入与规则
一维镜头位置按给定记录变化,四层背景各有初始偏移和滚动比例。未折回位置为初始偏移减镜头位置乘比例;按纹理宽度取零到宽度之间的余数。视口宽度不超过一块纹理,报告紧邻的两块起点。
纹理宽64,四层[初始偏移,滚动比例][[3, '0'], [58, '1/4'], [15, '1/2'], [63, '5/4']] 十个镜头位置[124, -17, -147, -26, 97, 129, -115, -36, 30, -34]
逐步记录
镜头位置124,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['27', '27', ['-37', '27']], ['-47', '17', ['-47', '17']], ['-92', '36', ['-28', '36']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-17,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['249/4', '249/4', ['-7/4', '249/4']], ['47/2', '47/2', ['-81/2', '47/2']], ['337/4', '81/4', ['-175/4', '81/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-147,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['379/4', '123/4', ['-133/4', '123/4']], ['177/2', '49/2', ['-79/2', '49/2']], ['987/4', '219/4', ['-37/4', '219/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-26,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['129/2', '1/2', ['-127/2', '1/2']], ['28', '28', ['-36', '28']], ['191/2', '63/2', ['-65/2', '63/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置97,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['135/4', '135/4', ['-121/4', '135/4']], ['-67/2', '61/2', ['-67/2', '61/2']], ['-233/4', '23/4', ['-233/4', '23/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置129,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['103/4', '103/4', ['-153/4', '103/4']], ['-99/2', '29/2', ['-99/2', '29/2']], ['-393/4', '119/4', ['-137/4', '119/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-115,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['347/4', '91/4', ['-165/4', '91/4']], ['145/2', '17/2', ['-111/2', '17/2']], ['827/4', '59/4', ['-197/4', '59/4']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-36,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['67', '3', ['-61', '3']], ['33', '33', ['-31', '33']], ['108', '44', ['-20', '44']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置30,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['101/2', '101/2', ['-27/2', '101/2']], ['0', '0', ['-64', '0']], ['51/2', '51/2', ['-77/2', '51/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-34,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['3', '3', ['-61', '3']], ['133/2', '5/2', ['-123/2', '5/2']], ['32', '32', ['-32', '32']], ['211/2', '83/2', ['-45/2', '83/2']]]。每块宽64,视口宽四十,两个相邻副本共同覆盖视口。
比例为零的层相位保持不变,其余层根据镜头和自身比例移动,越界只改变循环表示。
复核方法和适用范围
从前一次镜头到下一次的位移乘比例,应与该层未折回位移变化相反。两个相差完整纹理宽度的位置代表同一循环相位;折回结果必须非负且小于宽度,尤其检查负镜头位置。
滚动比例描述本例的画面效果,不是实际物体远近的物理测量。图层若不具备可平铺的边缘,仅正确计算循环位置也不能消除接缝。这里不计算遮挡、垂直滚动或相机缩放。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。
