Skip to content

Commit

Permalink
feat(ScreenSpace): add component, demo, docs (#536)
Browse files Browse the repository at this point in the history
* feat(ScreenSpace): add component, demo, docs

* chore: lint

* chore: remove unnecesary variable prop

---------

Co-authored-by: alvarosabu <[email protected]>
  • Loading branch information
andretchen0 and alvarosabu authored Dec 4, 2024
1 parent 5bae4de commit e43f112
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/.vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ export default defineConfig({
{ text: 'Edges', link: '/guide/abstractions/edges' },
{ text: 'PositionalAudio', link: '/guide/abstractions/positional-audio' },
{ text: 'AnimatedSprite', link: '/guide/abstractions/animated-sprite' },
{ text: 'ScreenSpace', link: '/guide/abstractions/screen-space' },
{ text: 'Outline', link: '/guide/abstractions/outline' },
{ text: 'Image', link: '/guide/abstractions/image' },
{ text: 'Billboard', link: '/guide/abstractions/billboard' },
Expand Down
18 changes: 18 additions & 0 deletions docs/.vitepress/theme/components/ScreenSpaceDemo.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<script setup lang="ts">
import { OrbitControls, ScreenSpace } from '@tresjs/cientos'
import { TresCanvas } from '@tresjs/core'
</script>

<template>
<TresCanvas clear-color="#333">
<TresPerspectiveCamera />
<OrbitControls />
<ScreenSpace :depth="5">
<TresMesh>
<TresTorusGeometry />
<TresMeshNormalMaterial />
</TresMesh>
</ScreenSpace>
<TresGridHelper :args="[10, 10]" />
</TresCanvas>
</template>
1 change: 1 addition & 0 deletions docs/component-list/components.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default [
},
{ text: 'Sampler', link: '/guide/abstractions/sampler' },
{ text: 'PositionalAudio', link: '/guide/abstractions/positional-audio' },
{ text: 'ScreenSpace', link: '/guide/abstractions/screen-space' },
{ text: 'Outline', link: '/guide/abstractions/outline' },
{ text: 'Image', link: '/guide/abstractions/image' },
{ text: 'Billboard', link: '/guide/abstractions/billboard' },
Expand Down
17 changes: 17 additions & 0 deletions docs/guide/abstractions/screen-space.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# ScreenSpace

<DocsDemo>
<ScreenSpaceDemo />
</DocsDemo>

`<ScreenSpace />` wraps its children in a `<TresGroup />` and positions them in front of the active camera at `:depth`.

## Usage

<<< @/.vitepress/theme/components/ScreenSpaceDemo.vue

## Props

| Prop | Description | Default |
| :--------------- | :----------------------- | ------------- |
| `depth` | Distance from the camera | `1` |
18 changes: 18 additions & 0 deletions playground/vue/src/pages/abstractions/ScreenSpaceDemo.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<script setup lang="ts">
import { OrbitControls, ScreenSpace } from '@tresjs/cientos'
import { TresCanvas } from '@tresjs/core'
</script>

<template>
<TresCanvas>
<TresPerspectiveCamera />
<OrbitControls />
<ScreenSpace :depth="5">
<TresMesh>
<TresTorusGeometry />
<TresMeshNormalMaterial />
</TresMesh>
</ScreenSpace>
<TresGridHelper :args="[10, 10]" />
</TresCanvas>
</template>
5 changes: 5 additions & 0 deletions playground/vue/src/router/routes/abstractions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ export const abstractionsRoutes = [
name: 'AnimatedSprite',
component: () => import('../../pages/abstractions/AnimatedSpriteDemo.vue'),
},
{
path: '/abstractions/screen-space',
name: 'ScreenSpace',
component: () => import('../../pages/abstractions/ScreenSpaceDemo.vue'),
},
{
path: '/abstractions/outline',
name: 'Outline',
Expand Down
31 changes: 31 additions & 0 deletions src/core/abstractions/ScreenSpace.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<script setup lang="ts">
import { shallowRef } from 'vue'
import { useLoop } from '@tresjs/core'
export interface ScreenSpaceProps {
depth?: number
}
withDefaults(defineProps<ScreenSpaceProps>(), {
depth: -1,
})
const outerRef = shallowRef()
useLoop().onBeforeRender(({ camera }) => {
if (outerRef.value) {
outerRef.value.quaternion.copy(camera.quaternion)
outerRef.value.position.copy(camera.position)
}
})
defineExpose({ instance: outerRef })
</script>

<template>
<TresGroup ref="outerRef">
<TresGroup :position-z="-depth">
<slot></slot>
</TresGroup>
</TresGroup>
</template>
2 changes: 2 additions & 0 deletions src/core/abstractions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import MouseParallax from './MouseParallax.vue'
import Outline from './Outline/component.vue'
import PositionalAudio from './PositionalAudio.vue'
import Reflector from './Reflector.vue'
import ScreenSpace from './ScreenSpace.vue'
import Text3D from './Text3D.vue'
import { useAnimations } from './useAnimations'
import Fbo from './useFBO/component.vue'
Expand All @@ -31,6 +32,7 @@ export {
PositionalAudio,
Reflector,
Sampler,
ScreenSpace,
Text3D,
useAnimations,
}

0 comments on commit e43f112

Please sign in to comment.