> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/fundamentos-del-contenido-3d/special-types.md).

# Tipos especiales

Aprende qué tipos especiales existen, incluidos Vector, Quaternions y más.

## Vector3

Decentraland usa *Vector3* datos para representar rutas, puntos en el espacio y direcciones. Los vectores también se pueden usar para definir orientaciones de rotación, como una alternativa más amigable a *Quaternions*. Un objeto Vector3 contiene valores numéricos para cada uno de los *x*, *y*, y *z* eje.

```ts
const myVector: Vector3 = { x: 8, y: 1, z: 8 }
```

El `Vector3` El namespace contiene una serie de métodos útiles que puedes llamar para evitar tener que ocuparte de la mayoría de las operaciones matemáticas con vectores. Escribe `Vector3.`, y VS Studio mostrará un dropdown con todas las funciones disponibles.

A continuación hay unas pocas líneas que muestran la sintaxis de algunas operaciones básicas con vectores.

```ts
// Crear un objeto vector
let myVector = Vector3.create(3, 1, 5)

// Sintaxis alternativa para crear un objeto vector
let myOtherVector: Vector3 = { x: 8, y: 1, z: 8 }

// Editar uno de sus valores
myVector.x = 5

// Llamar funciones del namespace Vector3,
// Todas estas funciones requieren pasar objetos Vector3 en sus parámetros

let normalizedVector = Vector3.normalize(myVector)

let distance = Vector3.distance(myVector, myOtherVector)

let midPoint = Vector3.lerp(myVector, myOtherVector, 0.5)
```

A menudo se requieren objetos Vector3 en los campos de varios componentes. Por ejemplo, el `Transform` componente contiene `Vector3` valores para el *posición* y *escala* de la entidad.

Para crear un [componente personalizado](/creator/content-creator-es/scenes-sdk7/arquitectura/custom-components.md) con parámetros que requieren valores Vector3, establece el tipo de estos parámetros como `Schemas.Vector3`.

{% hint style="warning" %}
**📔 Nota**: `Vector3` deben importarse mediante

> `import { Vector3 } from "@dcl/sdk/math"`

Consulta [Imports](/creator/content-creator-es/scenes-sdk7/primeros-pasos/coding-scenes.md#imports) para ver cómo manejarlos fácilmente.
{% endhint %}

### Atajos para escribir vectores de dirección

Existen los siguientes atajos para definir vectores genéricos:

* `Vector3.Zero()` devuelve *(0, 0, 0)*
* `Vector3.Up()` devuelve *(0, 1, 0)*
* `Vector3.Down()` devuelve *(0, -1, 0)*
* `Vector3.Left()` devuelve *(-1, 0, 0)*
* `Vector3.Right()` devuelve *(1, 0, 0)*
* `Vector3.Forward()` devuelve *(0, 0, 1)*
* `Vector3.Backward()` devuelve *(0, 0, -1)*

## Quaternions

Los Quaternions se usan para almacenar información de rotación para el componente Transform. Un Quaternion se compone de cuatro valores numéricos entre -1 y 1: *x*, *y*, *z*, *w*.

```ts
const myQuaternion: Quaternion = { x: 0, y: 0, z: 0, w: 1 }
```

Los Quaternions son diferentes de [*Euler* ángulos](https://en.wikipedia.org/wiki/Euler_angles), la notación más común *x*, *y* y *z* la notación con números que van de 0 a 360 con la que la mayoría de las personas está familiarizada. El engine expresa todas las rotaciones como Quaternions, así que tiene sentido evitar cálculos para convertir hacia y desde Euler siempre que sea posible.

El `Quaternion` El namespace contiene una serie de métodos útiles que puedes llamar para evitar tener que lidiar con muchas operaciones matemáticas. Escribe `Quaternion.`, y VS Studio mostrará un dropdown con todas las funciones disponibles.

A continuación hay unas pocas líneas que muestran la sintaxis de algunas operaciones básicas con Quaternions.

```ts
// Crear un objeto Quaternion
let myQuaternion = Quaternion.create(0, 0, 0, 1)

// Editar uno de sus valores
myQuaternion.x = 1

// Llamar funciones del namespace Quaternion
let midPoint = Quaternion.slerp(myQuaternion1, myQuaternion2, 0.5)

// Obtener la rotación necesaria para girar desde una dirección hacia otra,
// pasando dos valores Vector3 de dirección
let rotation = Quaternion.fromToRotation(Vector3.Forward(), Vector3.Up())
```

Como es mucho más fácil pensar en términos de grados Euler, el SDK incluye un par de funciones para convertir entre Quaternions y Euler.

{% hint style="info" %}
**💡 Consejo**: Evita ejecutar estas conversiones como parte de lógica recurrente dentro de un system que se ejecuta en cada tick, ya que eso puede resultar costoso. Estas conversiones son útiles principalmente para operaciones puntuales, como establecer la rotación de una nueva entidad.
{% endhint %}

```ts
// De Euler a Quaternion
let myQuaternion = Quaternion.fromEulerDegrees(90, 0, 0)

// De Quaternion a Euler
let myEuler = Quaternion.toEulerAngles(myQuaternion)
```

A menudo se requieren objetos Quaternion en los campos de componentes. Por ejemplo, el `Transform` componente contiene `Quaternion` contiene valores de rotación de la entidad.

Para crear un [componente personalizado](/creator/content-creator-es/scenes-sdk7/arquitectura/custom-components.md) con parámetros que requieren valores Quaternion, establece el tipo de estos parámetros como `Schemas.Quaternion`.

{% hint style="warning" %}
**📔 Nota**: `Quaternion` deben importarse mediante

> `import { Quaternion } from "@dcl/sdk/math"`

Consulta [Imports](/creator/content-creator-es/scenes-sdk7/primeros-pasos/coding-scenes.md#imports) para ver cómo manejarlos fácilmente.
{% endhint %}

## Escalares

Un escalar no es más que un número. Por esa razón, no tiene mucho sentido instanciar un `Scalar` objeto para almacenar datos, ya que puedes hacer lo mismo con un número. Sin embargo, las funciones en el `Scalar` namespace exponen varias funciones útiles (similares a las del *Vector3* namespace), que pueden usarse con números.

```ts
// Llamar funciones de la clase Scalar
let random = Scalar.randomRange(1, 100)

let midPoint = Scalar.lerp(number1, number2, 0.5)

let clampedValue = Scalar.clamp(myInput, 0, 100)
```

{% hint style="warning" %}
**📔 Nota**: `Scalar` deben importarse mediante

> `import { Scalar } from "@dcl/sdk/math"`

Consulta [Imports](/creator/content-creator-es/scenes-sdk7/primeros-pasos/coding-scenes.md#imports) para ver cómo manejarlos fácilmente.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/fundamentos-del-contenido-3d/special-types.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
