ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Fantasy-Map-Generator 高度图图片叠加指南:用 Texture 图层实现地形描摹与精确绘制

Fantasy-Map-Generator 高度图图片叠加指南:用 Texture 图层实现地形描摹与精确绘制 前端图形学3D渲染【免费下载链接】Fantasy-Map-GeneratorWeb application generating interactive and highly customizable maps项目地址https://gitcode.com/gh_mirrors/fa/Fantasy-Map-Generator点击查看免费下载导读Fantasy-Map-GeneratorFMG的Texture纹理图层除了作为地图纸张纹理之外还具备一个实用能力作为图片叠加层image overlay将一张外部图片直接叠放在当前地图之上。本指南聚焦这一特性在高度图编辑场景下的完整用法——你可以在绘制高度图的同时看见参考图片从而精确描摹陆地轮廓、按底稿补充地形要素。读完本文你将掌握如何加载外部图片作为叠加层、如何正确配置样式与图层顺序、为何图片必须满足 CORS 约束以及高度图编辑器进入 Erase 模式后叠加层被隐藏的原因与恢复方法。Texture 图层不止是纸张纹理在 FMG 的图层体系中texture是一个独立的渲染图层。它的渲染逻辑位于 src/renderers/draw-texture.ts实现非常直白export function drawTexture(layer: Layer): void { const element layer.getEl(); const { href, x, y } styles.texture.options; if (!href) return void element.replaceChildren(); element.innerHTML /* html */ image preserveAspectRatioxMidYMid slice x${x} y${y} width${Math.max(options.map.graph.width - x, 0)} height${Math.max(options.map.graph.height - y, 0)} href${href}/image; }从中可以读出三个关键事实没有href就不绘制styles.texture.options.href为空时图层内容被清空不产生任何 SVG 元素。图片以 SVGimage元素嵌入使用preserveAspectRatioxMidYMid slice即图片会等比缩放并裁剪以铺满目标区域而非拉伸变形。支持位置偏移x与y决定图片左上角的放置位置绘制宽高按地图宽度 - x计算所以偏移后图片会从边缘开始覆盖剩余区域。对应的样式数据结构定义在 src/generators/styles-schema.tstexture: z.strictObject({ attrs: z.strictObject({ opacity, filter, mask }), options: z.strictObject({ href: z.string(), x: z.number(), y: z.number() }) })也就是说Texture 图层拥有三个可调样式属性不透明度 opacity、滤镜 filter、蒙版 mask和三个选项图片地址 href、水平偏移 x、垂直偏移 y这些信息随地图一起保存。典型的叠加场景文档明确指出这一特性主要用于heightmap高度图编辑期间追踪陆地轮廓把一张参考地图或自己绘制的底稿叠在高度图上用画笔沿着轮廓重新塑造地形精确补充要素对照图片上的海岸线、山脉走向、水系位置逐笔刻画避免凭空目测带来的误差。它解决的痛点是高度图编辑模式下你既想看到当前地形又需要参考图片作对照——Texture 图层恰好让两者同时可见。前提与限制CORS 是硬门槛在开始操作之前必须理解该特性的网络约束。文档给出的注意事项docs/wiki/Heightmap-image-overlay.md图片必须托管在网络上。浏览器加载image元素时按普通 HTTP 请求获取资源因此纯本地文件路径如file://无法直接作为叠加源。CORS 限制由于浏览器安全策略只有Cross-Origin Resource SharingCORS策略相对开放的站点才能被正常加载并渲染。若图片服务器未返回允许跨域访问的响应头图片会加载失败或被浏览器拦截。CORS 代理是备选方案对于不满足条件的站点可以借助 CORS 代理转发请求。Imgur 是文档验证过的可用站点如果你需要一个能开箱即用的图片托管服务Imgur 可以正常配合此功能。从实现上看FMG 本身不会绕过 CORS 检查——draw-texture.ts只是把 URL 原样写进 SVGhref能否显示完全取决于浏览器对该资源的跨域策略判定。操作步骤把图片叠加到高度图上以下完整流程继承自官方 wikidocs/wiki/Heightmap-image-overlay.md并补充了界面细节与源码依据。第 1 步进入 Style 面板添加图片点击菜单进入Style样式设置找到Image图片行点击其右侧的按钮打开图片输入框。这一行的界面定义在 src/components/options/tabs/style-tab.ts它既是一个下拉选择框内置多张本地纹理图位于 public/images/textures如marble-big.jpg、pergamena-small.jpg等也提供了自定义 URL 的入口——点击后调用textureProvideURL()弹窗输入外部图片地址。第 2 步输入图片 URL 并确认在弹窗中粘贴图片的 URL。当 URL 正确时预览区域会立即显示出这张图片——但请注意预览能显示只说明 URL 本身有效并不代表它一定能作为叠加层工作因为 CORS 检查在真正嵌入渲染时才会完整生效。确认无误后点击Apply应用。第 3 步将 Clipping 改为 No Clipping仍然停留在Texture样式下找到Clipping裁剪选项并切换为No Clipping不裁剪。Clipping 选项的定义同样在 src/components/options/tabs/style-tab.ts共有三个取值选项值效果No clipping默认空值不裁剪图片覆盖整个地图范围Clip waterurl(#land)仅在地块陆地上显示水域部分被裁掉Clip landurl(#water)仅在水域上显示陆地部分被裁掉叠加参考图片时必须选No clipping因为描摹底稿需要完整铺满地图、与高度图任意区域对照若保留裁剪图片会被陆地/水域蒙版裁掉与地形重叠时会出现缺块。第 4 步切换 Heightmap 图层预设进入Layers面板选择Heightmap预设。这样会把图层组合切换为高度图编辑所需的默认配置纹理、高度图等基础图层处于可见状态。第 5 步启用 Texture 图层并调整顺序在 Layers 面板中启用 Texture 图层然后将 Texture 图层拖动到 Heightmap 图层之前。这一步决定了视觉层级FMG 的图层渲染遵循注册顺序即 z-order参见 src/components/layers.ts 的mapLayers数组texture位于ocean、landmass之后紧邻heightmap之前。拖动后 Texture 位于 Heightmap 之下高度图会叠在图片上方——配合不透明度调节两者可以同时清晰可见。提示Texture 与 Heightmap 图层均有快捷键见 src/components/options/tabs/layers-tab.ts——Texture 为XHeightmap 为H菜单中带下划线字母可快速开关图层。第 6 步调节不透明度在Style面板的 Texture 样式下降低图片的不透明度直到能同时看清地图与图片。文档也指出反过来降低高度图的不透明度同样可行取决于哪种观感更清晰。另外若图片位置与地图未对齐可在 Style 面板的 Image 行下方使用Shift X / Shift Y输入框styleTextureShiftX/styleTextureShiftY按像素微调偏移——这正是styles.texture.options.x / y字段对应的界面入口。反复微调直至轮廓与地形完全重合。第 7 步进入高度图编辑器开始描摹进入Tools → Heightmap选择Erase模式开始编辑。此时会发现Texture 图层被自动隐藏——这是 FMG 的预期行为进入高度图编辑模式时会关闭所有图层源码见 src/controllers/heightmap-editor.tsLayers.set([])会关闭除常驻层外的全部图层。此时只需回到Layers 面板重新启用 Texture 图层叠加层就会与高度图一同显示可以开始对照底稿绘制了。完成编辑后点击Exit Customization退出叠加层不再需要时可回到 Style 面板把 Image 恢复为 No texture 或删除 URL。高度图编辑器与叠加层的配合细节之所以强调在Erase 模式下使用叠加层是因为高度图编辑器详见 docs/wiki/Heightmap-customization.md有三种模式模式数据保留海岸线修改叠加层可用性Erase全部重新生成可改支持图片转换器与模板编辑器最适合配合叠加描摹Keep大部分保留不可改数据不动但不能动海岸线Risk大部分保留可改允许改海岸线但可能产生错误其中Erase模式功能最全含 Image Converter 与 Template Editor因此文档中的叠加工作流默认落在 Erase 模式下。进入该模式的对话框文案src/controllers/heightmap-editor.ts也明确建议高度图是所有派生数据河流、城镇、国家等的根基编辑前务必先保存地图。编辑期间可结合高度图编辑器自带的Show Drainage显示水流方向与Allow Water Erosion允许水侵蚀选项实时预览效果叠加层始终位于底层不会遮挡编辑视图。常见问题与排查要点1. URL 预览正确但 Apply 后地图上看不到图片预览仅验证 URL 可达性。若真正渲染时被拦截几乎可以确定是 CORS 问题——换用文档验证过的 Imgur或为图片地址套一层 CORS 代理。2. 图片出现但被陆地/水域裁掉一部分检查 Texture 样式的 Clipping 是否已设置为No clippingurl(#land)/url(#water)会把图片裁成陆地或水域形状。3. 进入高度图编辑后叠加层消失这是 FMG 进入编辑模式时关闭所有图层所致Layers.set([])属于预期行为。回到 Layers 面板重新勾选Texture图层即可恢复显示不需要重新加载图片。4. 图片与地图错位在 Style 面板使用 Image 行下方的 Shift X / Shift Y 微调偏移对应options.x / options.y或检查地图尺寸是否与图片比例差异过大——xMidYMid slice会等比缩放铺满不会拉伸。5. 性能顾虑样式面板对 Image 行有明确提示Big textures can highly affect performance大纹理图片会显著影响性能。叠加用图建议选择与地图尺寸相当、分辨率适中的图片避免超大原图拖慢渲染。小结Texture 图层作为图片叠加层是 FMG 高度图手工绘制工作流中看着底稿画地形的关键机制。整个链条从界面到渲染都非常清晰Style 面板输入 URLstyle-tab.ts→ 存入样式对象styles.texture.options.hrefstyles-schema.ts→ 图层注册layers.ts→ 渲染时以 SVGimage嵌入draw-texture.ts。只要满足 CORS 前提、把 Clipping 设为 No Clipping、将图层拖到 Heightmap 之下并调好透明度再配合 Erase 模式下重新启用 Texture 图层的小技巧你就能在任何参考图的基础上精确重建任何大陆与海岸线。赞分享前端图形学3D渲染【免费下载链接】Fantasy-Map-GeneratorWeb application generating interactive and highly customizable maps项目地址https://gitcode.com/gh_mirrors/fa/Fantasy-Map-Generator点击查看免费下载相关推荐flet-map 地图叠加图片图层 OverlayImageLayer 完整使用指南在 Flet 地图上叠加 OverlayImage 与 RotatedOverlayImageflet map 地图叠加图片图层 OverlayImageLayer 完整使用指南在 Flet 地图上叠加 OverlayImage 与 RotatedOv前端跨平台桌面应用移动开发Fantasy-Map-Generator v1.123.0 3D 视图进阶Eroded Terrain 侵蚀地形与 Satellite Texture 卫星纹理完全指南Fantasy Map Generator v1.123.0 3D 视图进阶Eroded Terrain 侵蚀地形与 Satellite Texture 卫星前端图形学3D渲染Flet 地图叠加图片 OverlayImage 完全指南在 Python 中给地图叠加任意图片图层Flet 地图叠加图片 OverlayImage 完全指南在 Python 中给地图叠加任意图片图层 导读 OverlayImage 是 flet_map 扩前端跨平台桌面应用移动开发上一篇AliceVision HDR图像处理从多曝光到高动态范围合成的完整指南下一篇RuleGo优势分析为什么选择Go语言规则引擎创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表