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

64 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 虚拟几何(VirtualGeometry)
**脚本入口:** `eve.VirtualGeometry()`
GPU 驱动的虚拟几何管线:把球面等网格切成簇(cluster),按视点做簇级裁剪与
LOD 选择,只绘制可见簇——适合大场景/高密度几何。Vulkan 与 WebGPU 均可用
(先以 `isAvailable()` 检查当前设备初始化状态)。
## 基本用法
```squirrel
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。