Files
EVEngine/docs/usr/modules/virtualgeometry.md
T

2.0 KiB
Raw Blame History

虚拟几何(VirtualGeometry)

脚本入口: eve.VirtualGeometry()

GPU 驱动的虚拟几何管线:把球面等网格切成簇(cluster),按视点做簇级裁剪与 LOD 选择,只绘制可见簇——适合大场景/高密度几何。Vulkan 与 WebGPU 均可用 (先以 isAvailable() 检查当前设备初始化状态)。

基本用法

vg <- eve.VirtualGeometry();
if (!vg.isAvailable()) { print("virtual geometry unavailable\n"); return; }

local r = vg.newRenderer();
r.buildIcosphere(4);              // 细分 4 的 icosphere
r.setViewport(gfx.getWidth(), gfx.getHeight());
r.setCameraSimple(eyeX, eyeY, eyeZ, targetX, targetY, targetZ, fovDeg);

function eve_update(dt) {
    r.setModelYaw(elapsed * 0.4);
    r.update();
}

function eve_render() {
    gfx.clear();
    // 将 r.resolve() 得到的簇几何上传绘制(配合 Gpgpu/Graphics 管线)
}

目标导向指南

查看 LOD 与可见簇

getLodLevel() / getMaxLodLevel()、getClusterCount()、getVisibleCount()、 getTotalTriangleCount() 提供每帧统计,用于验证视距与裁剪。

接入自定义渲染

resolve() 返回 ByteData(簇三角形数据),可经 gpgpu 或 graphics 管线 上传绘制;isReady() 为 true 时才可 resolve。

API 快查

VirtualGeometry(模块)

  • getName():模块名("VirtualGeometry")。
  • isAvailable()、newRenderer()。

VirtualGeometryRenderer

  • buildIcosphere(subdivision)。
  • setViewport(w, h)、setCameraSimple(ex,ey,ez, tx,ty,tz, fovDeg)、 setModelYaw(radians)。
  • update()、resolve() → ByteData、isReady()。
  • 统计:getViewWidth / getViewHeight / getClusterCount / getVisibleCount / getTotalTriangleCount / getLodLevel / getMaxLodLevel。

生命周期

  • Vulkan 与 WebGPU 后端均可用;WebGPU 使用 WGSL compute 和 storage buffer。
  • resolve() 返回的 ByteData 归调用方;每次相机/模型变化后需重新 update() 再 resolve。