把前七章串成一个经典教学范例:程序化岛屿 + glTF 角色 + 骨骼动作 + 地面采样行走——应用规则全部留在示例代码里。
examples/xge_3d_walk 按经典 3D 教学组织:初始化 → 创建场景 → 读取输入 → 更新角色与相机 → 绘制。教程策略(岛屿生成、移动、重力、相机)全部留在示例内;XGE 只提供高度场拷贝、三角形采样、蒙皮、天空与渲染。
// 257×257 高度场:多八度值噪声 + 径向衰减,srgb 顶点色烘焙进 257² 纹理
for (int step = 64; step >= 4; step /= 2, amplitude *= .5f) { ... }
// 海滩→草地→岩石按高度混色,再乘逐点颗粒噪声
xge3d_material_desc_t md = xge3dMaterialDefault();
md.metallic = 0; md.roughness = 1;
md.maps[XGE3D_MAP_BASE_COLOR].texture = pTexture; // 顶点色贴图海面是一个 unlit 大面片(基色深青、粗糙度 0.25),天空按六面法线基程序化生成渐变+云+太阳高光——两段代码都在 main.c 里,可以直接抄。
// 加载 explorer.gltf,四段剪辑交给动画器
xge3dModelInstantiate(pScene, pModel, (xge3d_node_t){0}, &d.actor);
xge3dAnimatorCreate(pScene, d.actor, &d.animator);
// 每步移动前做地面采样:高度与坡度门槛 = 可行走
int valid = xge3dTerrainSample(pTerrain, 0, nx, nz, &height, &normal);
if (valid != XGE_OK || height < .25f || normal.y < .68f) {
++d.blocked; // 拒绝这步:太低(水下)或太陡
} else { d.position.x = nx; d.position.z = nz; }
// 空中时积分重力,落地回贴地面高度