@ adatechnology/ game- 交互 三
3.js 适配器用于 @adatechnology/game-interactables 内容包,通过
HouseholdApi (单位:千美元) PropsApi 联 合 国 @adatechnology/game-props3d 加号 part(id, pivot, ry, draw)) (中文(简体) ).
它把一个内容包的原始部分变成几个合并的元件, 移动世界动画的部分, 并绘制效果,屏幕,
镜相相相相相相相相相相相相相相相相相相相相相相相相相相相相. three 是导入的对等依赖 仅作为类型: 主机通过自己的 THREE (和 Reflector(中文(简体) )
里面,所以从来没有第二个副本 三在捆绑。 无资产,无其他运行时间依赖关系.
安装
pnpm add @adatechnology/game-interactables-three three
没有捆绑的浏览器( 全局为 GameInteractablesThree:
<script src="https://unpkg.com/@adatechnology/game-interactables-three/dist/index.global.js"></script>
<script>
const adapter = GameInteractablesThree.createThreeAdapter(THREE, { document })
</script>
使用量
import * as THREE from 'three'
import { Reflector } from 'three/examples/jsm/objects/Reflector.js'
import { createThreeAdapter } from '@adatechnology/game-interactables-three'
const gfx = createThreeAdapter(THREE, { document, Reflector, envMap })
// 1. build an object: every primitive is merged into one geometry per material, every part into its own group
const { api, finish } = gfx.createMeshApi({ quality: 'game' })
pack.build('wardrobe', {}, api) // your content pack draws through api.box / cylinder / leaf / plane / light / part
const { group, parts } = finish() // parts: { door: Group, drawer_1: Group, ... }
scene.add(group)
// 2. each frame
world.update(dt)
gfx.syncObject(world, 'wardrobe-1', parts, { time: clock.elapsedTime })
effects.update(dt, world.emitters())
mirrors.update(camera, world.mirrors([x, y, z], 6))
每个功能也都不受约束 并带走 THREE 第一条: createMeshApi(THREE, options), (中文(简体) ), applyPose(THREE, group, motion, t),, , , , , , , , .
网点
createMeshApi(THREE, { materials, quality, shadows }) 返回时 { api, finish, materials }。建造者引入一个
game-shapes 计划( s)createShapeRecorder 游戏道具3d)和 finish 把它烤起来 generate; 字节为
移动前用自己的模板制作的此 api(tests/exact-golden.test.ts页:1.
- 执行
box, (中文(简体) ),cylinder(形状)cyl, (中文(简体) ),cyl6, (中文(简体) ),cone, (中文(简体) ),sphere, (中文(简体) ),leaf, (中文(简体) ),plane(附地图集)uv, (中文(简体) ),light财务报告和审定财务报表part。 。 。 . - 静态原始人被烤入 一个
BufferGeometry每件材料:静态正体的绘图调用是数字 使用中的材料(plain, (中文(简体) ),metal, (中文(简体) ),wood, (中文(简体) ),glass, (中文(简体) ),fabric, (中文(简体) ),plant, (中文(简体) ),water, (中文(简体) ),emissive, (中文(简体) ),atlas_picture, (中文(简体) ),atlas_floor) (中文(简体) ). part(id, pivot, ry, draw){\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}所有牵引到里面的东西draw组成一个自己的小组, 合并的每个材料。 组的起源是 转动它ry,因此在部分框中表示一个轴或滑动轴。 名称是part:<id>财务报告和审定财务报表userData.part = id组合 财务报告和审定财务报表 它的蛋白质,所以raycaster.intersectObject(group, true)[0].object.userData.part给了被击中的部分.M.x, (中文(简体) ),M.z, (中文(简体) ),M.ry(b) 部分内部绘制的坐标是相对于其支点.materials映射您材料的密钥; 缺少密钥的默认值vertexColors(单位:千美元)MeshStandardMaterial页:1quality: 'high', (中文(简体) ),MeshLambertMaterial页:1'game',它也使用更少的片段). Atlas材料由你提供(a)CanvasTexture内容提要.api.light创建一个PointLight在正确的组内;finish()ưμ㼯alights。 。 。 .- 绘制调用
game质量.plain, (中文(简体) ),metal, (中文(简体) ),wood财务报告和审定财务报表fabric是一个共享的兰伯特材料, 所以它们合并成一个网格每 目标.finish(spec)(通过包返回的光谱;选项)mergeParts默认值game质量)还合并了其中的一部分PartSpec.group与一个运动(盲丝:顶点阴影中一个倒接点,一套制服,阴影接踵而来)和cloth软相卷(一行上衣:一网相接,一倒相接的布指数和锚地,每块布能自活起.parts[id]接下来 合并组的分数( e)userData.merged和syncObject驱动它。 带有镜像的部件,一个转动的部分(ry或孤军奋战. 在家庭包上测量:将38个网眼盲为3个,衣线31至2个. - 材料钩.
materialFor(key, partId)(通过createMeshApi,或finish(spec, { materialFor })返回材料 每个网格partId实值null例如,一个带每个房间的光罩。 将克隆物组合并 批量阴影器,但 保留 联合国onBeforeCompile, (中文(简体) ),customProgramCacheKey, (中文(简体) ),defines财务报告和审定财务报表userData(批发补丁运行在你之后),所以 被合并的盲线或衣线被蒙上面具并像其他一切一样被点燃;具有不同材料的网格从不被混入一个被合并的网格. createScreen请求一个willReadFrequently2D上下文(画布每次重排都会被重新加载;这避免了浏览器的回读警告).
行为和同步
applyPose(THREE, group, motion, t) 构成其 Motion (hinge / 摇摆 / knob 旋转, 幻灯片翻译, 比例尺沿
页:1 其余的姿势被记住在 group.userData.rest,所以叫它每个帧 从来没有漂移. syncObject(THREE, world, objectId, parts, { time }) 应用来自世界的每个部分的t和每个软音量的起伏(组在 soft.part ?? soft.id) (中文(简体) ).
衣服会摇摆 投出正确的阴影
const handle = gfx.attachSway(clothMesh, { amplitude: 0.04 })
swayMaterial(THREE, base, { amplitude, anchorY }) 复制材料并补齐顶点阴影器( 统一) time, (中文(简体) ), ax, (中文(简体) ), az, (中文(简体) ),
anchorY)于是顶点从锚线上悬起并摇摆. 这个 同一补丁 进入 customDepthMaterial (方向和点数)
阴影)和 customDistanceMaterial (点光影),所以影跟随动画而不是闪烁. attachSway 全部设置
三个在网状上; syncObject 驾驶它的制服从 world.sway(...)。 。 。 .
效果
// `scene` (where the particle objects go) and `camera` (its fov sizes the point sprites) are required options.
// `camera` may also be a function returning the current camera, or `null` for a 90 degree lens.
const effects = gfx.createEffects({ scene, camera, maxParticles: 800, document })
effects.update(dt, world.emitters()) // reads the camera it was created with; `effects.setCamera(other)` swaps it
effects.setViewHeight(renderer.domElement.height) // on resize
烟花和蒸汽(烟花,柔软,起伏和生长),火花(添加,黄色至红色),火花和水. 一个 Points 各种固定缓冲器,
互换后移, 每帧没有分配; 活体总数从未超过 maxParticles (按种类划分). 宝石被画在画布上
document,或作为数据纹理生成。 种子相生,故同相种子相生出同相花. Sprite 大小使用相机
垂直 fov (和 zoom),每页阅读 update (或 setCamera(camera));没有相机,假设有90度镜头.
- 水费 (强度为0.25和上)是一个带带丝的半透明流网,沿引力弧向下滚动
倒数
floorY选项)或改为emitter.reach水深一米(水龙头倒入水盆),四周有喷水滴和一滴水 带着一点小雾,它降落的地方。 薄发者(tap)相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相相去相去相去相去相去相去相去相去相去相相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相相 每条流一个绘图调用 (单位:千美元)maxStreams,默认值 6。 低强度滴入. - 天然气
flame是一个小蓝圆锥的环 每燃烧器(所有环都共享一个网,一个抽取呼叫,maxFlames)加上柔软的发光. - 他们住在这里
effects.meshes(单位:千美元)group, (中文(简体) ),streams, (中文(简体) ),flames) (中文(简体) ).
屏幕
const tv = gfx.createScreen({ w: 128, h: 72 })
tvMesh.material = tv.material
tv.setOn(true); tv.setChannel(2); tv.update(dt)
Canvas纹理: 关闭时为黑色而不会发光; 打开时, 0 频道为彩色条, 1 静态噪音, 2 为动画地貌( 更高) 数字用倒数来重复.
镜像
const mirrors = gfx.createMirrors({ max: 1, resolution: 512 })
mirrors.register('wardrobe-1:mirror', mirrorMesh) // world id objectId:mirrorId
mirrors.update(camera, world.mirrors(eye, 6)) // returns the ids that got a real reflector
注册的 meshes 显示一个嵌入图材料。 离这里最近的 max 面对相机 得到集合 Reflector在飞机前放入一毫米
与网格的旋转和大小。 没有 Reflector 所有东西都留在地窖地图上.
renderer.info 和反省者. 三个 Reflector 让现场再次在主场内 render(); 被嵌入的会使重生
renderer.info (当 info.autoReset 开始吧,所以 info.render.calls 只能数反射手的传球. createMirrors({ keepInfo })
(默认) true)将反射器包住,从而将主通关的计数器添加回并 info.render.calls 编号 : triangles 覆盖整个
边框。 设定主机 renderer.info.autoReset = false 并重置它自己 独自一人.
坐标
createCord(THREE, points, radius, material) 建立一个管; catenary(a, b, sag, n) 返回时 n 悬索的分数,其最低值
点是 sag 和弦下方为米.
页:1
poseOf将可交互包的外观数学(同为默认值)转换为正弦,因此渲染的部分总是与引擎相匹配.- 一切都是决定性的:效果和屏幕噪声使用种子发电机.
销毁
finish(spec) 将 spec 的破坏标记复制到三个对象,这样一个破坏主机就可以找到每个网格的由: userData.destructionMaterial (SDK 材质 id)在静态的 meshes(对象默认)上,在每一部分组及其 meshes上,在部分组及其 meshes上, userData.destructionPart (该部分编号,作为 @adatechnology/game-destruction-three 期望, userData.destructionPiece 财务报告和审定财务报表 userData.destructionJoint. 部件合并成一个共享组(blind slats),带有第一部分的标记. 损害本身是由 @adatechnology/game-destruction; 此软件包仅包含标签 。 没有光谱,没有标记.
葡萄牙
适应者三.js para o @adatechnology/game-interactables. Recebe as primitivas dos packes de conteúdo (第1行)box, (中文(简体) ), cylinder, (中文(简体) ), leaf, (中文(简体) ),
plane, (中文(简体) ), light 电子 parte 作为军政府 美洲地美特丽亚·波克材料, com cada parte móvel (porta, gerta, tampa) em um grupo próprio com 相机 相机 相机 相机 相机 相机
折纸没有活口。 欧 THREE (原始内容存档于2013-10-12). semprepre passado pelo jogo (o pacote só pigna tipos).
const gfx = createThreeAdapter(THREE, { document, Reflector, envMap })
const { api, finish } = gfx.createMeshApi({ quality: 'game' })
pack.build('guarda_roupa', {}, api)
const { group, parts } = finish()
scene.add(group)
// a cada quadro
gfx.syncObject(world, 'guarda-roupa-1', parts, { time: clock.elapsedTime })
坦贝姆电车 swayMaterial 编号 : attachSway (balanço de roupa no 顶点遮阳剂, 共产材料, profundidade e de distância iguais, 第a段)
(fumaça、雾、蒸气、água、faíscas)、telas comcanais animados、espelhos com) Reflector 保护马伊斯
e cabos (英语:createCord, (中文(简体) ), catenary) (中文(简体) ).