You are reading Tres v1 docs. Head over tresjs.org for V2 docs.
Skip to content
On this page

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.

vue
<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.

vue
<template>
  <TresCanvas>
    <TresScene>
      <!-- Your scene goes here -->
    </TresScene>
  </TresCanvas>
</template>

Then you can add a PerspectiveCamera using the <TresPerspectiveCamera /> component.

vue
<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:

ts
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 />.

vue
<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.