# Tu primera escena Esta guía te ayudará a crear tu primera escena en Tres. 🍩
## Configurando el Canvas Antes de poder crear una escena, necesitamos un lugar donde mostrarla. Usando solo [ThreeJS](https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene), tendríamos que crear un elemento HTML `canvas` para montar el `WebglRenderer` e inicializar la `scene`. Con **TresJS**, solo necesitas importar el componente predeterminado `` y agregarlo al template de tu componente Vue. ```vue ``` ::: warning Es importante que todos los componentes relacionados con la escena estén dentro del componente ``. De lo contrario, no se renderizarán. ::: El componente `TresCanvas` realizará algunas configuraciones detrás de escena: - Crea un [**WebGLRenderer**](https://threejs.org/docs/index.html?q=webglrend#api/en/renderers/WebGLRenderer) que se actualiza automáticamente en cada fotograma. - Establece el bucle de renderizado para que se llame en cada fotograma en función de la frecuencia de actualización del navegador. ## Tamaño del lienzo De forma predeterminada, el componente `TresCanvas` tomará el **ancho y alto del elemento padre**. Si estás experimentando una página en blanco, asegúrate de que el elemento padre tenga un tamaño adecuado. ```vue ``` Si tu escena no va a formar parte de una interfaz de usuario, también puedes hacer que el lienzo ocupe el ancho y alto de toda la ventana utilizando la propiedad `window-size` de la siguiente manera: ```vue ``` ## Creando una escena Necesitamos 4 elementos principales para crear una experiencia en 3D: - Una [**Escena**](https://threejs.org/docs/index.html?q=scene#api/en/scenes/Scene) para contener la cámara y el/los objetos juntos. - Un [**Renderizador**](https://threejs.org/docs/index.html?q=renderer#api/en/renderers/WebGLRenderer) para renderizar la escena en el DOM. - Una [**Cámara**](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 de tu componente Vue y automáticamente creará un `Renderizador` (elemento DOM `canvas`) y una `Escena` para ti. ```vue ``` Then you can add a [**PerspectiveCamera**](https://threejs.org/docs/index.html?q=perspectivecamera#api/en/cameras/PerspectiveCamera) using the `` component. ```vue ``` ::: warning Un problema común es que la posición predeterminada de la cámara es el origen de la escena (0,0,0). TresJS establecerá automáticamente la posición de tu cámara en `[3,3,3]` si la propiedad `position` no está definida. Si no se define ninguna cámara en tu escena, se agregará automáticamente una cámara de perspectiva. ::: ## Agregando un 🍩 Esa escena se ve un poco vacía, vamos a agregar un objeto básico. Si estuviéramos usando **ThreeJS** puro, necesitaríamos crear un objeto [**Mesh**](https://threejs.org/docs/index.html?q=mesh#api/en/objects/Mesh) y adjuntarle un [**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) de la siguiente manera: ```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 se utiliza para contener la geometría y el material necesarios para representar una forma en el espacio 3D. Ahora veamos cómo podemos lograr lo mismo fácilmente con **TresJS**. Para hacer eso, vamos a usar el componente `` y entre los slots predeterminados, vamos a pasar un `` y un ``. ```vue ``` ::: info Observa que no necesitamos importar nada, esto se debe a que **TresJS** genera automáticamente un **Componente Vue basado en el objeto Three que deseas usar en PascalCase con un prefijo Tres**. Por ejemplo, si quieres usar una `AmbientLight`, puedes usar el componente ``. ::: ```vue ``` A partir de aquí puedes comenzar a agregar más objetos a tu escena y jugar con las propiedades de los componentes para ver cómo afectan la escena.