@adatechnology/game-fluids- 三号机车
三.js 制造器用于 @adatechnology/game-fluids。它只读取模拟状态,所以它精确地画出了
决定性世界说(一个具有相同状态的局域网客户端提取出相同的液体). three 仅用于类型中的对等依赖: 您通过您的
拥有 THREE 在运行时间.
它画的是什么:
- 集装箱中的液体:在每个被捆绑的物体内部,容器的内外形被世界-空间液体表面所剪接出,所以顶部总是 在平面上,无论什么倾斜(右倾,倒地,倒地), 每液体取出一料(颜色,不透明,从光泽取出粗糙). 蒸气泡从热水面升起.
- 流线: 弹道上一条线条( 音符已更新) , 其加速时会缩小, 下降会增长在前端 和末日的后遗症;薄溪是跌倒的顺序.
- 静态:从16个流口露出光滑的风扇(从来不是完美的圆盘),倒在平面上,上面有一根头发
(单位:千美元)
polygonOffset以污点的常态为取向 由液体用柔软的轮圈来取锡 加上内光泽的风扇wetRadius反映 当它干燥时,环境会消退 干后标记是微弱的地垫补丁. - 喷出: 集合圆液(
THREE.Points一个小ShaderMaterial,圆形图案被绘制在碎片遮蔽器中,没有纹理.
装有标准材料,没有传输,少数抽取电话,每质量固定预算.
安装
pnpm add @adatechnology/game-fluids-three @adatechnology/game-fluids three
没有捆绑的浏览器( 全局为 GameFluidsThree;它捆绑了少数 game-fluids 帮助它,你还装入 GameFluids 创造世界:
<script src="https://unpkg.com/three/build/three.min.js"></script>
<script src="https://unpkg.com/@adatechnology/game-fluids/dist/index.global.js"></script>
<script src="https://unpkg.com/@adatechnology/game-fluids-three/dist/index.global.js"></script>
<script>
const fluids = GameFluids.createFluids({ seed: 1 })
const view = GameFluidsThree.createFluidRenderer(THREE, { scene, fluids })
</script>
使用量
import * as THREE from 'three'
import { createFluids } from '@adatechnology/game-fluids'
import { createFluidRenderer } from '@adatechnology/game-fluids-three'
const fluids = createFluids({ seed: 7 })
fluids.addSurface({ id: 'floor', point: [0, 0, 0], normal: [0, 1, 0], halfSize: [10, 10], porosity: 0.05 })
fluids.addContainer(
{ capacity: 0.25, liquid: 'coffee', liters: 0.25, temperature: 90, shape: { kind: 'cylinder', radius: 0.04, height: 0.1 }, opening: 0.04 },
{ id: 'cup' },
)
const view = createFluidRenderer(THREE, { scene, fluids, quality: 'medium', envMap })
view.bindContainer('cup', cupObject, { innerOffset: [0, 0.005, 0] }) // inner bottom centre in the object's space
// every frame
const p = cupObject.localToWorld(new THREE.Vector3(0, 0.005, 0)) // world position of the inner bottom centre
fluids.setTransform('cup', [p.x, p.y, p.z], [q.x, q.y, q.z, q.w])
fluids.update(dt)
view.update(dt)
innerOffset 在约束对象的空间中,是容器形状(内底中心)来源的相抵。 给
fluids.setTransform 一定是那个点的世界位置和物体的世界旋转。 物体被假定具有统一的尺度.
摧毁容器的物体(例如来自 @adatechnology/game-destruction电话: view.unbindContainer(id) 财务报告和审定财务报表
fluids.removeContainer(id);地上已经留下了污点,自己干.
API 密码
createFluidRenderer(THREE, options) 返回 a FluidRenderer。 。 。 .
| 选项 | |
|---|---|
scene | 增加效果的地方(一) fluid_renderer 组) |
fluids | 这个 FluidWorld 要绘制 |
quality | 'low', (中文(简体) ), 'medium' (违约)或 'high': 设置网格分辨率和预算如下: |
envMap | 湿地表反映的环境图(否则 scene.environment 如果主机设置了一个) |
pointScale | 点图示的像素比例, 大约为画布高度的一半( 默认 600) |
| 方法 | |
|---|---|
bindContainer(containerId, object3D, { innerOffset? }) | 在对象内绘制一个世界容器的液体 |
unbindContainer(containerId) | 拿掉那个液体 |
update(dt) | 推进视觉; 稍后调用 fluids.update(dt) |
clear() | 删除污点、溪流和颗粒( 绑住) |
dispose() | 从现场取出所有的东西 免费的几何和材料 |
stats() | { quality, containers, streams, stains, particles, triangles, budget } |
预算:污渍24 / 48. / 96,溪流12 / 24 / 48. 颗粒96 / 256 / 512 为低分/中分/高分. 当世界有 更多的污点比 预算,提取最新预算.
导出的类型 : FluidRenderer, (中文(简体) ), FluidRendererOptions, (中文(简体) ), FluidRendererStats, (中文(简体) ), BindOptions, (中文(简体) ), FluidQuality, (中文(简体) ), ThreeLib。 。 。 . smoothOutline(front, subdiv) 实值
也出口(定期用Catmull-Rom来取出污点).
正在运行的胶片
createFilmManager(THREE, options) 绘制 @adatechnology/game-fluids (血、旧血、大便、机油、燃料从墙上或地上流下)
宿主的表面。 阴道是流体标准的(从颜色到颜色,从梯度到平面,光泽,气泡,油和燃料等)
它在干厚的地方);它是透明的,所以宿主自己的地表显示什么是湿的。 电影留下 接近玩家: 最多6个网格
2×2米(160×160个细胞),仅在30米以内,在一毫秒的预算内模拟出并被脏矩上传(gpu: 通过 WebGLRenderer 这样
copyTextureToTexture (可使用). 超过20秒的电网 被更新的电网挤出 烤过 在污迹标记中
流动世界fluids.splash 和电影的颜色)并释放出.
const film = createFilmManager(THREE, { scene, camera, random: createFilmLcg(1), fluids, gpu: renderer })
film.launch({ fluid: 'blood', point: [0, 1.2, 0], velocity: [1, -1, 0], radius: 4 }) // a drop; the grid is made under it
film.drip({ fluid: 'fuel', point: [0, 0.9, 0], every: 0.5 })
const bridge = createFilmBridge({ fluids, manager: film, random })
// every frame: fluids.update(dt); bridge.update(dt); film.update(dt)
bridge.splat({ fluid: 'blood', point, direction, tint: { fresh: 0x8a0a0a, dry: 0x3a1c12 } }) // a wound, in the colours of an infection age
bridge.setWeather({ rain: 1 }) // the rain hook: drying stops, spread x1.5 (a no-op until game-weather drives it)
surfaceAt(point) 请发言、请墙壁和一站台的站台layoutFromSurfaces没有它,电影就躺在地上。 A 类 leak 具有
胶片从洞中滴入到它,直到溪流结束.
葡萄牙
伦德瑞扎多三.j @adatechnology/game-fluids: o líquido dentro do accidente (um vole cortado pelo plano da superfície, sempre) 收音机 :
平面平面图 平面图 平面图
{\fn华文楷体\fs16\1cHE0E0E0}蒸汽 蒸汽 Só lê o estado da simulação, então é igual em lan. 中国经济网.
const view = createFluidRenderer(THREE, { scene, fluids, quality: 'medium', envMap })
view.bindContainer('copo', objetoDoCopo, { innerOffset: [0, 0.005, 0] })
// a cada frame: fluids.setTransform(...); fluids.update(dt); view.update(dt)