Tile/Map-Based Game Techniques: Handling Terrain
Transitions
by David Michael
This article is another in my series of Tile/Map-based Game Techniques. In
this article I discuss a method for handling terrain transitions on your main
map display.
First off, by "terrain" I am referring to the background or base layer of
graphics for the map display. Terrain might refer to normal terrain types, such
as grasslands or forests, but it is not limited to this. In a science-fiction
game, for instance, the terrain could be bare metal or even the landscape
features of another planet.
The Problem
The problem of terrain transitioning grows out of the need for a single type
of terrain to be able to mesh with itself and still look good when placed next
to another terrain. A forest tile should fit together with other forest tiles so
that the forest proceeds seamlessly from one map cell to the next. But what
happens when the forest tile is placed next to another type of terrain, such as
mountains or grassland? Without some form "transitioning" the map looks very
blocky and artificial.
Figure 1: Terrain Without Transitions

One solution to the problem is to create specialized transition tiles that
"blend" sections of each terrain into a single tile. However, the need for all
terrains to transition into any other means that the number of specialized tiles
escalates quickly. It may not be obvious at first glance, but the number of
transitions required even between just 2 terrain types is quite large. On a
square grid, there are 8 possible points of transition: one for each side and
one for each corner. Even the simple forest-to-grassland transition would
require 256 transitions, and this would have to be done for each terrain
transition combination. If you have 9 or 10 terrain types, the amount of
graphics this approach would require is unworkable.
This can be refined some by using transitions with a transparent element,
allowing for more variety with fewer tiles. The forest transitions would then be
able to overlap any terrain. But 256 transition variations for each terrain type
still seems pretty excessive.
So how do you trim down the number of required transition graphics to a
number that is more manageable? This is how we did it.
Our Solution
The first part of our solution was to assign a "precedence" to the various
terrain types. By precedence, I mean that when two different terrain types meet,
one of them invariably "overlaps" the other. In the example of forest meeting
grassland, if forest has a higher precedence (and it should) then it will always
overlap the grassland.
In Artifact, we used the following terrain precedence (listed highest to
lowest): jungle, forest, mountain, hill, swamp, deserts, grassland, water (open
water or river). Please note that this precedence does not reflect the relative
elevations of the terrain but is instead based on which terrains looks best when
overlapping other terrains.
Figure 2: Artifact Terrain Precedence

The next step was to reduce the number of terrain transition variations from
256. This number can be cut drastically by separating the "edge" transitions and
the "corner" transitions. As it was pointed out above, a single terrain cell has
8 points of transition: one for each side and one for each corner. Thus, there
are only 16 possible edge transitions, and 16 possible corner transitions. By
using combinations of edge and corner transitions you can create all of the
necessary 256 variations with only 32 total tiles. This is a huge reduction in
graphics required.
The template we used followed a binary format. For the edges, west was
considered "bit 0", north was "bit 1", and east and south were "bit 2" and "bit
3", respectively. Similarly for the corners, the northwest corner was "bit 0",
the northeast corner "bit 1", and so on. How we arranged the actual terrain
transition graphics is demonstrated in Figure 3. If you think of the covered
edges as 1 and the non-covered edges as 0, you can see that the columns proceed
in normal binary manner: 0000, 0001, 0010, 0011, 0100, and so on.
Figure 3: Terrain Transition Template

Figure 4 shows how this was applied to create the grassland transitions in
Artifact.
Figure 4: Artifact Grassland Transitions

With this method drawing the map is now a 2-step process. For each map cell,
the base terrain must be drawn, and then any transitions that overlay it in
reverse order of precedence (lowest precedence drawn first). However, the
reduction in graphics required more than makes up for the additional work. Also,
since the transition graphics are mostly transparent, the actual "work" involved
is less than it might seem.
Using the precedence established earlier, and the bit assignments for the
edges and corners, calculating which transitions you need in a particular map
cell is relatively straightforward. Essentially, for each map cell, you check
all adjacency possibilities for terrain types that overlap the terrain of the
cell. The transition information for a single terrain type need only use 8-bits
of data (4 bits for the edges and 4 bits for the corners) which fits
conveniently into a single byte. Thus, the total terrain transition information
for Artifact's 9 terrain types requires only 9 bytes per map cell.
You can pre-calculate the transition information and store it with the map,
or you can calculate it "on the fly" at runtime. For rendering Artifact's map
display, I calculate the transitions for the visible portion of the map only.
This reduces the amount of storage required since only a small portion of the
map is visible at one time.
A quick example: To calculate the transitions needed for a hill terrain, you
need only consider any adjacent jungles, forests, and mountains, since those are
the only terrain types that have a higher precedence. Figure 5 demonstrates the
overlapping of transitions on the base terrain graphics, with a hill as the
center terrain.
Figure 5: Artifact Terrains, Before and
After

Conclusion
With a bit of preparation in the graphics and a few tricks during the
rendering, you can achieve professional-looking terrain transitions in your
game. While drawing the map becomes a bit more complicated, the reduction in
graphics required and the flexibility of the system more than make up for
that.
David Michael is co-owner of Samu Games and has produced several online
games, including Artifact and Paintball NET.
Copyright ?1999 by David Michael. All Rights
Reserved.
All Artwork Copyright ?1999 by Samu Games. All Rights
Reserved.
Discuss
this article in the forums
Date this article was posted to GameDev.net:
2/23/2000
(Note that this date does not necessarily correspond to the
date the article was written)

- 大小: 8.2 KB

- 大小: 5.7 KB

- 大小: 4.6 KB

- 大小: 2.7 KB

- 大小: 8.2 KB
分享到:
相关推荐
### 一种TIN生成算法及其三维显示 #### 引言 数字高程模型(Digital Elevation Model, DEM)是地理信息系统(Geographic Information System, GIS)中用来表达地形起伏的重要手段之一。根据子域划分方式的不同,...
2. **正演计算**:`res2dmod`通过精确的数值算法,计算出给定模型下的电位场分布,生成预测的测量数据。 3. **数据对比**:软件提供将理论数据与实测数据进行对比的功能,帮助评估模型的合理性。 4. **反演优化**...
内容概要:本文探讨了边缘计算环境中资源卸载的关键技术和群智能优化算法的应用。首先介绍了边缘计算资源卸载的基本概念及其重要性,展示了通过Python代码实现资源卸载的具体方法。接着详细讨论了群智能优化算法(如粒子群算法)在资源卸载中的应用,解释了如何通过调整适应度函数来优化卸载决策。最后,文章深入探讨了针对特定应用场景对群智能算法进行定制的方法,强调了在实际部署中需要考虑的因素,如计算能力、带宽限制和能量消耗等。 适合人群:对边缘计算和群智能优化算法感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于研究和开发边缘计算系统的企业和个人,旨在提高资源利用效率,降低延迟和能耗,优化任务分配。 其他说明:文中提供的代码示例有助于理解和实践相关理论,同时也指出了现有算法存在的局限性和改进方向。
内容概要:本文详细介绍了利用西门子S7-200 PLC和组态王构建矿井提升机控制系统的全过程。首先阐述了硬件配置选择,包括选用S7-224XP型号及其扩展模块,确保速度反馈和变频器调速等功能。接着深入探讨了PLC程序设计的关键部分,如速度闭环控制、PID参数调整、安全回路设计以及通信协议的应用。同时,文中展示了组态王用于监控和报警的具体实现方法,强调了可视化动画和历史曲线的功能。此外,作者分享了多个调试过程中遇到的问题及解决方案,如抗电磁干扰措施、抱闸时序优化等。最后总结了该系统在实际应用中的稳定表现,显著降低了故障率。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和组态软件有一定基础的从业者。 使用场景及目标:适用于需要设计和实施矿井提升机或其他类似复杂机械设备控制系统的场合。目标是提高系统的安全性、可靠性和效率,减少故障发生频率。 其他说明:文中提供了大量实用的技术细节和实践经验,对于理解和掌握PLC编程技巧、解决实际工程问题具有重要参考价值。
内容概要:本文详细探讨了储能系统在电力系统中同时参与调峰和调频的联合调度模型及其Matlab实现。文中指出,传统的调峰和调频模型通常是分离的,而将两者结合起来能够显著提高储能系统的经济效益。文章介绍了如何构建一个考虑电池退化成本、充放电功率约束以及用户负荷不确定性的储能优化模型,并提供了具体的Matlab代码示例。此外,还讨论了模型中的关键技术和实现细节,如充放电互斥约束、电池损耗计算、负荷不确定性处理等。 适合人群:从事电力系统优化、储能技术研发及相关领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解储能系统在电力系统中如何通过联合调度实现经济利益最大化的专业人士。目标是掌握储能系统在调峰调频方面的优化方法和技术手段。 其他说明:文中提到的模型和代码对于理解和解决储能系统在实际应用中的挑战具有重要指导意义。特别是针对负荷预测误差、电池老化等问题提出了有效的解决方案。
内容概要:本文详细介绍了如何利用Matlab/Simulink进行ACDCAC变频移相系统的仿真建模。首先,作者讲解了创建基本模型的步骤,包括选择合适的PWM变流器、设置LC滤波器参数以及配置IGBT开关频率。接着,深入探讨了移相控制的核心技术,如调制波生成、相位差设置、PI控制器参数整定等。此外,文中还提供了许多实用的小技巧,如优化仿真步长、避免波形失真、处理IGBT损耗等问题。最后,强调了仿真过程中需要注意的关键点,如正确设置接地、选择合适的求解器等。 适合人群:从事电力电子研究的技术人员、高校相关专业师生、对电力电子仿真感兴趣的工程爱好者。 使用场景及目标:适用于希望深入了解ACDCAC变频移相系统工作原理及其仿真的读者;帮助读者掌握使用Matlab/Simulink构建复杂电力电子系统的方法;提供实际操作指导,使读者能够独立完成类似项目的仿真。 其他说明:文中不仅涵盖了理论知识,还包括大量实战经验和代码片段,有助于提高读者的实际动手能力。同时,作者分享了许多个人经验教训,使得文章更具实用性。
内容概要:本文详细介绍了BB公司生产的DC-DC隔离电源芯片的应用及其优化方法。该芯片输入电压范围为5V~5.5V,输出电压5V,最大输出电流200mA,开关频率高达400kHz。文章首先探讨了芯片的基本参数和应用场景,特别是针对数字电路和模拟电路共存时的干扰问题。接着,作者分享了具体的电路设计经验,如反馈电阻的选择、SW引脚波形的优化以及PCB布局技巧。此外,文中还讨论了双芯片并联使用的负载均衡算法,并提供了STM32配置软启动功能的具体代码。最后,强调了电源隔离对于减少地环路干扰的重要性,并给出了多个实际案例和技术细节。 适合人群:从事电力电子、嵌入式系统开发的技术人员,尤其是对DC-DC隔离电源设计感兴趣的工程师。 使用场景及目标:①解决数字电路与模拟电路共存时的干扰问题;②提高电源系统的稳定性和效率;③掌握高频开关电源的设计和优化技巧。 其他说明:文章不仅提供了理论分析,还有大量实践经验分享,包括具体参数选择、电路设计、PCB布局等方面的注意事项。
内容概要:本文详细介绍了如何在ABAQUS中进行复合式密封垫的动力显示分析步建模及其后处理分析。主要内容涵盖材料参数设置、建模技巧、接触对设置、时间增量控制以及后处理提取接触应力的方法。文中强调了使用Mooney-Rivlin模型定义EPDM和WSR材料参数的重要性,并提供了具体的.inp文件和Python脚本示例。同时,讨论了膨胀率设置、接触算法选择、质量缩放参数的应用以及膨胀过程中应力分布的特点。 适合人群:从事有限元分析、密封件设计及相关领域的工程师和技术人员。 使用场景及目标:适用于需要精确模拟复合式密封垫在复杂工况下(如遇水膨胀)的行为的研究项目。主要目标是帮助用户掌握ABAQUS中动力显示分析步的具体应用,提高仿真精度和效率。 其他说明:文章不仅提供了详细的理论解释,还附带了大量的代码片段和实践经验,有助于读者更好地理解和应用所学知识。此外,文章还探讨了一些常见的陷阱和解决方案,如膨胀参数设置不当、接触定义不合理等问题。
内容概要:本文详细介绍了利用COMSOL进行二氧化碳驱替甲烷的多物理场仿真过程。首先构建了二维多物理场模型,选择达西定律和稀物质传递作为主要物理场,重点考虑了孔隙结构、材料参数(如黏度、渗透率)、边界条件(如注气井的压力和质量流量)以及求解器设置。文中强调了网格划分、参数设置、边界条件和求解器配置的具体操作和技术要点,展示了如何通过数值模拟研究二氧化碳驱替甲烷过程中可能出现的现象,如粘性指进、浓度场演化等。此外,还探讨了不同注入速度和压力对驱替效果的影响,提出了参数敏感性分析的重要性。 适合人群:从事页岩气开采、二氧化碳封存及相关领域的科研人员、工程师和技术爱好者。 使用场景及目标:适用于希望深入了解二氧化碳驱替甲烷机理的研究人员,以及希望通过数值模拟优化实际工程设计的工程师。目标是提高甲烷采收率并实现有效的碳封存。 其他说明:文中提供了详细的建模步骤和代码片段,帮助读者更好地理解和应用COMSOL进行相关仿真。同时提醒读者关注参数敏感性和实际地层条件的匹配,确保模拟结果的准确性。
1、文件说明: Centos8操作系统tesseract-langpack-nor-4.0.0-6.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tesseract-langpack-nor-4.0.0-6.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了如何在MATLAB中利用卷积神经网络(CNN)和双向门控循环单元(BIGRU)进行时序数据的分类任务。首先阐述了模型的基本结构,包括卷积层用于提取局部特征,以及BIGRU层用于捕捉时序依赖。接着讨论了数据预处理方法,如数据归一化、滑窗处理和数据集划分。然后探讨了训练配置的关键参数选择,如优化器、学习率调度器和批量大小等。此外,还强调了模型评估的重要性,提出了除了准确率外还需关注混淆矩阵、AUC等指标。最后分享了一些实际应用中的经验和技巧,例如将模型转化为ONNX格式以提高推理效率。 适合人群:具有一定MATLAB编程基础和技术背景的研究人员、工程师或学生。 使用场景及目标:适用于需要处理时序数据并进行分类的任务,如医疗诊断、金融预测、工业设备状态监测等。目标是帮助读者掌握CNN-BIGRU模型的设计、实现及其优化方法。 其他说明:文中提供了大量实用的代码片段和实践经验,有助于读者更好地理解和应用所介绍的技术。
用于词向量训练等语料文件
基于51单片机protues仿真的酒驾报警系统控制(仿真图、源代码、AD原理图、流程图) 酒驾报警: 1、通过AD芯片和传感器检测酒精浓度; 2、设置不同的报警值,喝酒检测和醉酒状态检测,LED指示不同的报警状态; 3、检测到喝酒状态,报警;检测到醉酒状态,启动刹车; 4、液晶屏显示相关信息; 5、仿真图、源代码、AD原理图、流程图;
web开发项目前端页面搭建
内容概要:本文介绍了二阶线性自抗扰控制(LADRC)模型的原理与Python实现。自抗扰控制是一种先进的控制策略,适用于处理系统中的不确定性和外部干扰。文中详细解释了LADRC的三大组成部分:跟踪微分器(TD)、扩张状态观测器(ESO)和非线性状态误差反馈控制律(NLSEF)。此外,提供了具体的Python代码示例,展示了如何构建并使用LADRC进行实际控制任务,如电机转速控制和四旋翼飞行器控制。文章还讨论了关键参数的选择和调试技巧,强调了ESO在实时估计系统状态和扰动方面的重要作用。 适合人群:具有一定编程基础和控制理论知识的研发人员和技术爱好者。 使用场景及目标:①需要提高控制系统鲁棒性的工程项目;②希望减少对外部干扰敏感度的应用场合;③寻求替代传统PID控制器的高效解决方案。 其他说明:文中提供的代码可以直接应用于实际项目中,只需根据具体应用场景调整相关参数即可获得良好的控制性能。同时,附带了一些实用的调试建议,有助于解决常见的实施难题。
华为云2024知行合一通信行业数据治理实践指南53页.pdf
内容概要:本文详细介绍了基于MATLAB的电-气-热综合能源系统耦合优化调度模型。该模型旨在通过优化电网、气网和热网之间的协同运作,提高能源利用效率。文中具体展示了如何构建和求解这一复杂系统的关键步骤和技术细节,如直流潮流用于电网建模、气网的压力-流量关系线性化处理、热网的温度传递延迟模型等。此外,还讨论了模型的目标函数设计、求解器配置及其性能表现,并强调了代码的高质量和模块化设计,确保了良好的可读性和扩展性。 适合人群:从事综合能源系统研究的技术人员、高校相关专业师生、对能源系统优化感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解电-气-热综合能源系统耦合机制的研究者;可用于教学演示、项目开发、学术研究等领域,帮助使用者掌握复杂的多能源系统优化方法。 其他说明:代码中包含了详尽的注释和模块化设计,便于理解和维护;提供了真实的测试数据(如比利时20节点配气网络),增强了模型的实际应用价值。
内容概要:本文详细探讨了带时间窗的车辆路径优化(VRPTW)问题及其在物流领域的应用。首先介绍了VRPTW的基本概念和问题背景,即在满足客户需求如时间窗、载重限制的前提下,寻找最优车辆行驶路径以最小化总行驶距离和成本。接着,文章深入讲解了几种常用的优化算法,包括遗传算法(GA)、蚁群算法(ACO)和粒子群算法(PSO),并通过MATLAB实现了这些算法的关键步骤。此外,还讨论了物流选址对车辆路径的影响,并提出了结合两者进行综合优化的方法。最后,通过对不同算法的实际测试,展示了它们各自的优缺点及应用场景。 适合人群:从事物流管理、运筹学研究的专业人士,以及对车辆路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要解决复杂物流配送问题的企业,旨在提高配送效率、降低成本、提升客户满意度。具体目标包括但不限于:减少车辆行驶距离、优化配送时间表、合理分配车辆资源等。 其他说明:文中提供了大量MATLAB代码示例,帮助读者更好地理解和实现相关算法。同时强调了时间窗处理不应采用硬约束而应加入适当的惩罚项,以避免算法无法找到可行解的情况发生。
基于51单片机protues仿真的火灾、云梯逃生控制系统设计(仿真图、源代码、AD原理图) 云梯逃生控制器: 1、三个传感器,MQ-3,MQ-9,DHT11,一个步进电机,四个按键,一个显示屏。 2、测量温湿度、可燃气体浓度,测量值超过设定值,开启云梯并报警。 3、按键设置报警值; 4、液晶屏显示采集结果和设置; 5、温湿度,可燃气体,步进电机; 6、仿真图、源代码、AD原理图;
内容概要:本文详细介绍了一款基于分布式驱动电动汽车的VCU整车控制器模型。该模型主要分为四个层次:轮毂电机驱动模块、CarSim输出的真实参数模块、基于Dugoff理论的轮胎力计算模块以及卡尔曼滤波估计模块。文中具体介绍了各个模块的功能及其内部实现机制,如电机的基本模型、获取CarSim数据的方法、Dugoff轮胎力计算的具体公式以及卡尔曼滤波器(UKF、CKF、HCKF)的实现细节。此外,文章还探讨了联合仿真的挑战和解决方案,如时钟同步、矩阵运算维度对齐等问题,并给出了优化建议和实测数据。 适合人群:从事电动汽车研发的技术人员,尤其是对VCU整车控制器、车辆状态估计感兴趣的工程师。 使用场景及目标:适用于电动汽车控制系统的设计与开发,旨在提高车辆状态估计的准确性,优化四轮驱动电机的控制性能。通过该模型,可以帮助研究人员更好地理解和应用先进的状态估计算法和技术。 其他说明:文章不仅提供了详细的理论背景和技术实现,还分享了许多实践经验,如滑移率计算的优化、矩阵运算的注意事项等。对于希望深入研究电动汽车控制系统的读者来说,是一份非常有价值的参考资料。