INCREIBLE, El Profe regaña a huse durante la MasterClass «Señales Digitales en Unity3D»

Mira el video completo aquí.

Todos siempre han creído que «El Profe», conocido personaje del canal huse360 de programación de videojuegos Unity3D, era el mismísimo huse disfrazado, pero los fans se llevaron una tremenda SORPRESA durante el live de la masterclass que trata sobre «Desplazar Objetos con Señales Digitales en Unity3d» Mira lo que sucedió en este link https://youtu.be/9J8NpBUyRRM

Para ver la masterclass completa de señales digitales en Unity haz clic en este enlace.

MasterClass: Desplazar Objetos con Señales Digitales en Unity3d

Hey PRO! Visita mi página http://www.huse360.com y regístrate para acceder a la MasterClass «Desplazar Objetos con Señales Digitales en Unity3d» que se transmitirá en vivo este Viernes 5-marzo-2021 a las 14:00 horas de Colombia. 

Solamente haz clic en el botón «Quiero registrarme, PRO».  Pronto estaré enviando al correo el link y los materiales de la clase. No te la pierdas!

Cómo saber si un punto está dentro de un triángulo

Detectar si un punto se encuentra dentro de un triángulo, Video tutorial (Unity)

Aprendamos a detectar si un punto está dentro de un triángulo.
Y por qué deberíamos molestarnos en aprender eso?
Detectar colisiones!
Pues resulta que en los Videojuegos modernos todo está formado a partir de triángulos.

Un cuadrado se forma a partir de dos triángulos

Un círculo es un conjunto de triángulos al rededor de un centro común.
Un cubo está formado por 12 triángulos.
Y así sucesivamente todo se puede descomponer en triángulos.

Si sabes detectar cuando un punto está dentro de un triángulo podrás determinar cuándo un personaje está chocando contra una pared, el suelo, un enemigo, etc…

Empecemos determinando si un punto P se encuentra dentro del triángulo formado por los vértices ABC.

Podemos definir a P como la suma entre dos vectores: uno naranja, ponderado por w1 y correspondiente al segmento AB; y otro amarillo, ponderado por w2 y correspondiente al segmento AC.

Cuando P se encuentra en el vértice A, w1 = 0 y w2 = 0.

Cuando P se encuentra en el vértice B, w1 = 1 y w2 = 0.

Cuando P se encuentra en el vértice C, w1 = 0 y w2 = 1.

De qué nos sirven w1 y w2?

Fíjate que cuando el punto está bajo el segmento AC, w1 se torna negativa.

Cuando el punto está hacia el otro extremo fuera del segmento AB, w2 se torna negativa.

Y cuando el punto yace más allá del segmento BC, la suma entre w1 y w2 es mayor que 1.

Entonces podemos determinar que el punto P se encuentra dentro del triángulo ABC si se cumplen las siguientes condiciones:

Cómo determinar w1 y w2?

Primero definamos D y E como los siguientes segmentos del triángulo:

Entonces podemos definir al punto P como:

Tenemos una ecuación con dos incógnitas. Para resolverla, expresemos los vectores de manera independiente en sus componentes (x, y):

Quedando un sistema de dos ecuaciones con dos incógnitas que podemos resolver mediante álgebra.
Despejando w2:

Ahora, sustituimos w2 en la ecuación que contiene a Px:

Para despejar w1, dividimos por Ey a ambos lados de la ecuación:

Destruyendo paréntesis queda así:

Agrupando w1:

Despejando w1:

Y con esto obtenemos las dos fórmulas que nos permiten hallar w1 y w2.

Porción de código C# que realiza la comprobación. El proyecto completo de Unity se encuentra en el video.

w1 = (e.x * (a.y - p.y) + e.y * (p.x - a.x)) / (d.x * e.y - d.y * e.x);
w2 = (p.y - a.y - w1 * d.y) / e.y;

pointInTriangle = (w1 >= 0.0) && (w2 >= 0.0) && ((w1 + w2) <= 1.0);


if (pointInTriangle)
{
    //Punto dentro del triángulo
}
else
{
     //Punto fuera del triángulo
}
Programa en Unity que comprueba si un punto se encuentra dentro de un triángulo.

Qué hacer si ocurre una división por cero?

En el video encontrarás la respuesta!

Nos vemos, PRO!

Quaterniones en los videojuegos

quaternion unity español

Qué es un Quaternion?

En términos simples, un quaternion es un vector de cuatro componentes que almacena una rotación.

Unity usa quaterniones para efectuar rotaciones en los objetos.

De dónde vienen los quaterniones?

Tienen su origen en los números imaginarios. El número imaginario i denota la raíz cuadrada de -1, Y se utiliza para resolver problemas de este tipo:

Números imaginarios y complejos

Los números imaginarios son la base de los números complejos, los cuales están formados por una parte real y otra parte imaginaria.
«Complejo» es un nombre horroroso porque da la sensación de que son números complicados y no lo son. Los matemáticos hubieran optado por bautizarlos como números de rotación, pues para esto se utilizan para efectuar rotaciones en dos dimensiones.

Con ayuda de los números complejos y una multiplicación especial podemos realizar sencillas rotaciones en dos dimensiones dentro de Unity.

Sin embargo, para rotar en tres dimensiones necesitamos extender el número complejo agregando dos componentes imaginarias, quedando una parte real y tres imaginarias para un total de cuatro componentes por eso se le llama quaternion.

Multiplicación de Quaterniones

Podemos utilizar la multiplicación de quaterniones para combinar varias rotaciones de manera sencilla. Te explico la multiplicación de manera detallada en este video.

Uso de vectores en videojuegos

Qué es un vector?

Desde el punto de vista del programador no es más que un conjunto de dos, tres cuatro cuatro números, los cuales en Unity se representan como: Vector2, Vector3 y Vector4 respectivamente.

Suma y resta de vectores

Estos números se pueden sumar o restar por medio de cada una de sus componentes de manera independiente, por ejemplo:

Suma y resta de vectores

Como en un videojuego la posición de cualquier objeto está representada por un vector, podemos utilizar la suma o resta para desplazar objetos de juego.

Desplazar objetos con suma y resta de vectores

Multiplicación de un vector por un escalar

Para multiplicar, tomamos un escalar y lo multiplicamos por cada una de las componentes del vector: el resultado es otro vector.

Multiplicación de un vector por un escalar

Esta operación es útil para agrandar o reducir objetos.

Magnitud de vectores

La magnitud sirve para saber el «tamaño» de un vector. Con esto podemos realizar comparaciones. Cuando un vector tiene magnitud igual a 1, se dice que está normalizado.

Podemos usar la magnitud para obtener la distancia entre dos objetos.

Producto punto

Se obtiene al multiplicar las componentes de dos vectores y sumar el resultado.

Podemos utilizar este producto para saber si dos objetos están mirando hacia la misma dirección o en direcciones opuestas. Esta operación es computacionalmente mucho más barata que utilizar funciones trigonométricas.

Cómo hacer volar un avion en unity 2019 (parte 2)

Mira la parte 1 aquí.
En este tutorial te enseño a hacer parecer que un avión vuela por un escenario infinito, pero ten presente qué en los videojuegos las cosas no siempre son lo que parecen.

Recuerda mirar:
El tutorial anterior del simulador de vuelo.
El tutorial de como girar un objeto usando quaterniones.
Y también los tutoriales de vectores y quaterniones.

Plano con textura de grama en unity
Para crear la ilusión de movimiento creamos un plano con una textura que se mueve en dirección hacia la cámara. Así parece que el aeroplano avanza.
Simulador de vuelo, aeroplano siguiendo al ratón.
Usando aritmética de vectores hacemos que el aeroplano siga las movimientos del puntero del ratón.
Simulador de vuelo, inclinación de cámara Y aeroplano
Con ayuda de quaterniones hacemos que la cámara y el aeroplano se inclinen cuando éste se desplaza lateralmente. Esto le proporciona un toque de naturalidad a la escena.
Simulador de vuelo, misil en escena.
Cada vez que el usuario presiona el botón de disparo, instanciamos un objeto misil con la misma dirección y rotación del aeroplano.
Simulador de vuelo, explosión misil.
Cuando el misil choca contra el suelo, instanciamos un sistema de partículas de explosión.

Cómo hacer volar un avion en unity 2019 (parte 1)

Mira la parte 2 aquí.
Listo para crear un simulador de vuelo? Con lo aprendido en este canal lo puedes hacer sin inconvenientes!
Empezamos descargando un avión que debemos editar para hacer que el eje Z mire hacia el frente y también desencajar la hélice para hacer que gire.
Con ayuda de Quaternion.AngleAxis hacemos girar la hélice con gran velocidad angular al rededor del eje Z.
Hacemos la cámara hija del aeroplano.
Partimos desde el video dónde hacermos girar el aeroplano a punta de Quaterniones.
Creamos y mezclamos dos rotaciónes según la entrada de ratón.
Multiplicando por Vector.forward, obtenermos hacia dónde miran las rotaciones; así sabremos hacia dónde tiene que avanzar el objeto.
Agregamos un escenario.
Para suavizar los controles agregamos una interpolación con Quaternion.Lerp
Para hacer que la aeronave se incline cuando giramos en el eje de las Z, esto le dará mucha mas naturalidad al simulador.
Si hubieramos utilizado Quaternion.Euler, no podríamos controlar los giros de la aeronave con tanta presición.

ARM lenguaje ensamblador desde cero Parte 2: Hello World

Hoy imprimiremos un Hello World en la Terminal JTAG UART, y en el proceso aprenderemos sofisticadas técnicas de programación y varias instrucciones como:

LDR: Load register, para cargar datos desde memoria a registro
STR: Store register, para cargar datos desde registro a memoria
LDRB: Load register byte, cargar datos desde memoria byte por byte

CMP: Compare, crear codigo condicional

B: Branch (desvío) permite hacer saltos incondicionales dentro del programa para crear loops (ciclos, bucles, repeticiones)
BNE: saltos en el programa si la condicion es igual
BNE: saltos en el programa si la condicion es diferente

Directrices

.equ: definir constantes
.global : definir símbolos
.global _start: definir el punto de entrada del programa
.asciz definir cadenas de caracteres terminadas en cero (null)

Estructuras de control
Un ciclo está formado por las siguiente partes: inicialización, operaciones, incremento/decremento, condición de parada.

La memoria es un gigantesco arreglo.

Las etiquetas nos permiten marcar porciones del programa y hacer mucho más facil su lectura y seguimiento

Leer arreglos

A la fecha este es el único canal de youtube que habla de CPUlator

La programación de computadoras es MARAVILLOSA! porque con ella se pueden salvar vidas, a través de sofisticados aparatos médicos que alojan programas en su interior.
También puede hacerte feliz, cuando en segundos compras un tiquete de avión por internet hay programas tras bambalinas gestionando toda la transacción y eso te permite viajar, conocer nuevos lugares e incluso encontrarte con tus seres queridos. Y eso que no te he dicho que el sistema de navegación de la aeronave también está controlada por una serie de programas de computadora… jajaj

Pero en malas manos la programación es peligrosa pues puede usarse para robar dinero de cuentas bancarias, espionaje o apoyar actos terroristas.

Así que usa con mucha sabiduría el poder que voy a otorgarte en este video.

Qué es la memoria?
Desde el punto de vista del programador es una arreglo gigantesco de bytes. De fábrica vienen 16MB, o sea en ella podemos guardar bytes desde la dirección cero hasta la dirección 16´777.215.
Es gigantesco en comparación a la 16.384 bytes de las computadoras domésticas de antaño.

32 bits
El armv7 es un procesador de 32 bits (o 4 bytes). Por eso es que el contador del programa cuenta de 4 en 4. O sea que con una memoria de 16MB podemos almacenar hasta 4´194.304 números diferentes (de 32 bit cada uno).

Todo es un bit
En este simulador, y prácticamente en todas las computadoras, especialmente las consolas de videojuegos; a nivel de máquina todo son bits: enciendes un bit en tal dirección de memoria y BOOM! aparece un sprite; otro bit por allá y BAM! un sonido.
Y aunque es muy apasionante tener todo ese control sobre la máquina, al principio puede ser perturbador tener que memorizar todas esas direcciones. Por ello es que los programadores crean conjuntos de librerías con miles de cosas ya preparadas para hacernos la vida más fácil.

Para enviar caracteres de texto a la terminal debemos hacerlo a través de una dirección de memoria específica 0xFF201000.
Si en esa dirección guardamos el número 65 Bam! aparece una A en la terminal.
Queremos que aparezca el caracter 5, guardamos en la dirección el código 53.
De dónde salen esos números? solamente tienes que buscar en internet Códigos Ascii

Normalmente en una terminal escribes texto en el teclado y esperas que se refleje en pantalla pero en esta terminal aparentemente no sucede nada!!! Es porque no has escrito el programa que le diga lo que debe de hacer.

Después de esto vas a valorar mucho lo que hace por ti la función PRINT

En el próximo tutorial aprenderemos a obtener texto desde la terminal,
usar operaciones booleanas y si queda tiempo programaremos funciones

Nos vemos pro!

ARM lenguaje ensamblador desde cero Parte 1: contador suma resta mult

Aprende a programar el procesador ARM desde cero. Hoy aprenderemos lo que es el PC (Contador del programa) y veremos las instrucciones

NOP: No OPeration
MOV: Asignar valores a registros
ADD: Sumar
SUB: Restar
MUL: Multiplicar
MLA: Multiplicar y sumar en un solo paso

#ARM #CPUlator #programming

Conviértete en un mejor PRO-gramador de alto nivel a través del bajo nivel. Vale la pena aprender a programar lenguaje ensamblador en una época como esta donde reinan los lenguajes de alto nivel?

CPUlator:
Simulador usado para ejecutar los ejemplos
https://cpulator.01xz.net