# Tu primera scene
Esta guía te va a ayudar a crear tu primera scene TresJs. 🍩
## Preparando el Canvas
Antes de poder crear una escena, necesitamos un lugar donde mostrarla. Usando [TresJs](https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene) simple, necesitaríamos crear un `canvas` html element para montar el `WebglRenderer` y inicializar la `scene`
Con **TresJs** solo necesitas añadir el componente default `` a la plantilla de tu componente de Vue.
```vue
```
::: warning
Es importante que todos los componentes con relación a la escena vivan entre el `` componente. Si no, no se renderizará.
:::
El `TresCanvas` componente internamente va a:
- Crea un [**WebGLRenderer**](https://threejs.org/docs/index.html?q=webglrend#api/en/renderers/WebGLRenderer) que automáticamente se actualiza cada frame.
- Eso crea el render loop una función que se llamará usando el requestAnimationFrame API del navegador.
## Tamaño del canvas
Por defecto el componente `TresCanvas` tomará **La altura y el ancho del elemento padre**, si estas experimentando una pagina en blanco, asegúrate de que los tamaños están correctamente configurados
```vue
```
Si tu escena no va a ser parte de la UI, puedes forzar el canvas para que tome los tamaños del viewport usando el `window-size` prop, de esta manera:
```vue
```
## Creando una escena
Necesitamos 4 elementos core para crear una experiencia 3D :
- Una [**Escena**](https://threejs.org/docs/index.html?q=scene#api/en/scenes/Scene) para agregar la cámara y los objetos juntos.
- Un [**Renderer**](https://threejs.org/docs/index.html?q=renderer#api/en/renderers/WebGLRenderer) para renderizar los objetos dentro de nuestro canvas.
- Una [**Camera**](https://threejs.org/docs/index.html?q=camera#api/en/cameras/Camera)
- Un [**Objeto**](https://threejs.org/docs/index.html?q=object#api/en/core/Object3D)
Con **TresJs** solo necesitas agregar el componente `` al template en tu Vue SFC y automáticamente creara el `Renderer` (`canvas` DOM Element) y la `Scene` por ti.
```vue
```
Puedes añadir una [**PerspectiveCamera**](https://threejs.org/docs/index.html?q=perspectivecamera#api/en/cameras/PerspectiveCamera) usando el`` componente.
```vue
```
::: warning
Un problema común es que la posición por defecto de la cámara es (0,0,0), TresJs automáticamente configurar la posición de tu camera a `[3,3,3]` si la propiedad `position` no es configurada manualmente. Si no hay una cámara declarada en tu escena, una PerspectiveCamera será añadida automáticamente
:::
## Añadir una 🍩
Esta escena parece un poquito vacía, añadamos un objeto básico. Si estuviéramos usando **TresJs** puro, necesitaríamos crear un [**Mesh**](https://threejs.org/docs/index.html?q=mesh#api/en/objects/Mesh) objeto y adjuntarlo a una [**Material**](https://threejs.org/docs/index.html?q=material#api/en/materials/Material) y una [**Geometry**](https://threejs.org/docs/index.html?q=geometry#api/en/core/BufferGeometry) como eso:
```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)
```
Un Mesh es un objeto básico de la escena en three.js, y es usado para contener la geometría y el material necesario para representar una forma en el espacio 3D.
Ahora, vemos como podemos lograr fácilmente el mismo con **TresJs**. Para hacerlo, vamos a usar `` componente, y entre los puestos por defecto, vamos a pasar un `` y un ``.
```vue
```
::: info
Nota que no necesitamos importar nada, eso es porque **TresJs** generar automáticamente un **Componente de Vue con base del Three Objeto quieres usar en CamelCase con un prefijo TresJs**. Por ejemplo, si quieres usar un `AmbientLight` usarías `` componente.
:::
```vue
```
A partir de ahora, puedes empezar a añadir más objetos a tu escena y empezar a jugar con las propiedades de las componentes para ver como se cambian la escena.