2.0 KiB
2.0 KiB
虚拟几何(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。