Your first scene
This guide will help you to create your first Tres scene. 🍩
Setting up the experience Canvas
Before we can create an Scene, we need somewhere to display it. Using plain ThreeJS we would need to create a canvas
html element to mount the WebglRenderer
and initialize the scene
With TresJS you only need to add the default component <TresCanvas />
to the template of your Vue component.
<template>
<TresCanvas> // Your scene is going to live here </TresCanvas>
</template>
WARNING
It's important that all components related to the scene live between the <TresCanvas />
component. Otherwise, they will be not rendered.
The TresCanvas
component is going to do some setup work behind the scene:
- It creates a WebGLRenderer that automatically updates every frame.
- It sets the render loop to be called on every frame based on the browser refresh rate.
Creating a scene
We need 3 core elements to create a 3D experience:
With TresJS you can create a Scene using the <TresScene />
component.
<template>
<TresCanvas>
<TresScene>
<!-- Your scene goes here -->
</TresScene>
</TresCanvas>
</template>
Then you can add a PerspectiveCamera using the <TresPerspectiveCamera />
component.
<template>
<TresCanvas>
<TresPerspectiveCamera />
<TresScene>
<!-- Your scene goes here -->
</TresScene>
</TresCanvas>
</template>
Adding a Sphere
That scene looks a litle empty, let's add a basic object. If we where using plain ThreeJS we would need to create a Mesh object and attach to it a Material and a Geometry like this:
const geometry = new THREE.TorusGeometry(1, 0.5, 16, 32)
const material = new THREE.MeshBasicMaterial({ color: 'orange' })
const donut = new THREE.Mesh(geometry, material)
scene.add(donut)
A Mesh is a basic scene object in three.js, and it's used to hold the geometry and the material needed to represent a shape in 3D space.
Now let's see how we can easily achieve the same with TresJS. To do that we are going to use <TresMesh />
component, and between the default slots, we are going to pass a <TresTorusGeometry />
and a <TresMeshBasicMaterial />
.
<template>
<TresCanvas>
<TresPerspectiveCamera />
<TresScene>
<TresMesh>
<TresTorusGeometry />
<TresMeshBasicMaterial color="orange" />
</TresMesh>
</TresScene>
</TresCanvas>
</template>
INFO
Notice that we don't need to import anything, thats because TresJS automatically generate a Vue Component based of the Three Object you want to use in CamelCase with a Tres prefix. For example, if you want to use a AmbientLight
you would use <TresAmbientLight />
component.
From here onwards you can start adding more objects to your scene and start playing with the properties of the components to see how they affect the scene.