视差背景的滚动比例和循环边界怎样配合:四层背景的十次循环滚动·实例19
多层背景可以按不同于镜头的速度移动,营造层次感。重复纹理还需要处理循环边界,否则镜头走过一个纹理宽度时可能出现跳变或空白。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
输入与规则
一维镜头位置按给定记录变化,四层背景各有初始偏移和滚动比例。未折回位置为初始偏移减镜头位置乘比例;按纹理宽度取零到宽度之间的余数。视口宽度不超过一块纹理,报告紧邻的两块起点。
纹理宽80,四层[初始偏移,滚动比例][[40, '0'], [35, '1/4'], [59, '1/2'], [37, '5/4']] 十个镜头位置[-46, -77, -49, 46, -58, -119, -55, 24, -59, -19]
逐步记录
镜头位置-46,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['93/2', '93/2', ['-67/2', '93/2']], ['82', '2', ['-78', '2']], ['189/2', '29/2', ['-131/2', '29/2']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-77,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['217/4', '217/4', ['-103/4', '217/4']], ['195/2', '35/2', ['-125/2', '35/2']], ['533/4', '213/4', ['-107/4', '213/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-49,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['189/4', '189/4', ['-131/4', '189/4']], ['167/2', '7/2', ['-153/2', '7/2']], ['393/4', '73/4', ['-247/4', '73/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置46,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['47/2', '47/2', ['-113/2', '47/2']], ['36', '36', ['-44', '36']], ['-41/2', '119/2', ['-41/2', '119/2']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-58,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['99/2', '99/2', ['-61/2', '99/2']], ['88', '8', ['-72', '8']], ['219/2', '59/2', ['-101/2', '59/2']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-119,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['259/4', '259/4', ['-61/4', '259/4']], ['237/2', '77/2', ['-83/2', '77/2']], ['743/4', '103/4', ['-217/4', '103/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-55,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['195/4', '195/4', ['-125/4', '195/4']], ['173/2', '13/2', ['-147/2', '13/2']], ['423/4', '103/4', ['-217/4', '103/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置24,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['29', '29', ['-51', '29']], ['47', '47', ['-33', '47']], ['7', '7', ['-73', '7']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-59,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['199/4', '199/4', ['-121/4', '199/4']], ['177/2', '17/2', ['-143/2', '17/2']], ['443/4', '123/4', ['-197/4', '123/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
镜头位置-19,四层结果依次为[未折回位置,循环相位,相邻两块起点]:[['40', '40', ['-40', '40']], ['159/4', '159/4', ['-161/4', '159/4']], ['137/2', '137/2', ['-23/2', '137/2']], ['243/4', '243/4', ['-77/4', '243/4']]]。每块宽80,视口宽四十,两个相邻副本共同覆盖视口。
比例为零的层相位保持不变,其余层根据镜头和自身比例移动,越界只改变循环表示。
复核方法和适用范围
从前一次镜头到下一次的位移乘比例,应与该层未折回位移变化相反。两个相差完整纹理宽度的位置代表同一循环相位;折回结果必须非负且小于宽度,尤其检查负镜头位置。
滚动比例描述本例的画面效果,不是实际物体远近的物理测量。图层若不具备可平铺的边缘,仅正确计算循环位置也不能消除接缝。这里不计算遮挡、垂直滚动或相机缩放。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。
