物体
ThreeJs通用Mesh等
和 ThreeJs
物体部分相通,如下都支持: Bone、Group、InstancedMesh、Line、LineLoop、LineSegments、LOD、Mesh、Points、Skeleton、SkinnedMesh、Sprite 详情移步:ThreeJs-物体部分 下面来举个例子:
<template>
<TresCanvas>
<TresMesh :position="[1,0,0]" :scale-y="2" :rotation-x="Math.PI * 2">
<TresBoxGeometry />
<TresMeshBasicMaterial />
</TresMesh>
</TresCanvas>
</template>
也可以这么描述:
<template>
<TresCanvas>
<TresMesh
:geometry="new THREE.BoxGeometry(1, 1, 1)"
:material="new THREE.MeshBasicMaterial({ color: 0x00ff00 })" />
</TresCanvas>
</template>
可挂载参数:
挂载参数 | 名称 | 参数例子 | 扩展 | 扩展参数例 | 扩展说明 |
---|---|---|---|---|---|
position | 位置 | [1,0,0] | position-x | 1 | x,y,z 同理 |
scale | 缩放 | [1,2,1] | scale-y | 2 | x,y,z 同理 |
rotation | 旋转 | [0,Math.PI * 2,0] | rotation-z | -Math.PI * 2 | x,y,z 同理 |
cast-shadow | 阴影贴图 | ||||
...... | 等等详见 | ThreeJs-Object3D |
TIP
- 组件名都是
Tres
+对应的ThreeJs名称
,其中一般包含Geometry
几何体和Material
材质。 - 官方不推荐直接挂载反应式的数据绑定参数,若需要动态改变物体的具体参数,推荐如下操作:
<template>
<TresCanvas>
<TresMesh ref="boxRef">
<TresBoxGeometry />
<TresMeshBasicMaterial />
</TresMesh>
</TresCanvas>
</template>
<script lang="ts" setup>
import { shallowRef, watchEffect } from 'vue'
import { TresCanvas } from '@tresjs/core'
const boxRef: ShallowRef<TresInstance | null> = shallowRef(null)
watchEffect(() => {
if (boxRef.value) {
boxRef.value.position.x = 2.0
console.log(boxRef.value)
}
})
</script>
- 其中
TresGroup
例子如下:
<template>
<TresCanvas>
<TresGroup ref="groupRef" :position="[2,0,0]">
<TresMesh>
<TresBoxGeometry />
<TresMeshBasicMaterial color="red" />
</TresMesh>
<TresMesh>
<TresSphereGeometry />
<TresMeshBasicMaterial color="blue" />
</TresMesh>
</TresGroup>
</TresCanvas>
</template>
- 更多详情可移步:tresjs-点击详情
组件是 特殊物体: Primitives
TresJS
中一个通用的底层组件,允许您在Vue中直接使用任何three.js对象,而无需抽象它,所谓物体占位符。详情可移步:tresjs-点击详情TIP
- 使用场景一:使用原生的
ThreeJs
API来创建物体对象,然后直接塞到占位符。
<template>
<TresCanvas>
<primitive :object="obMesh" />
</TresCanvas>
</template>
<script setup lang="ts">
import { Mesh, BoxGeometry, MeshBasicMaterial } from 'three'
const geometry = new BoxGeometry(1, 1, 1)
const material = new MeshBasicMaterial({ color: 0x00ff00 })
const obMesh = new Mesh(geometry, material)
</script>
- 使用场景二:等待读取三维模型,然后塞到占位符。
<template>
<TresCanvas>
<primitive :object="nodes.AkuAku" />
</TresCanvas>
</template>
<script lang="ts" setup>
import { useGLTF } from '@tresjs/cientos'
const { nodes } = await useGLTF('/models/AkuAku.gltf')
</script>
注意:此段代码是异步等待读取模型:await
以及 <Suspense>
,在vue3.x的<script setup>
语法糖中,需要做<Suspense>
处理,具体在常见问题中,请移步:点击详情