Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
Generación de un prisma 3D a partir de cualquier polígono 2D

Estoy creando un juego de sprites en 2D en Unity, que es un entorno de desarrollo de juegos en 3D. He restringido toda la traslación de objetos al plano XY y la rotación al eje Z.

Mi problema es que las mallas que se usan para detectar colisiones entre objetos aún deben estar en 3D. Tengo la necesidad de detectar colisiones entre el objeto del jugador (un colisionador de cápsulas) y un sprite (que tiene su volumen de colisión definido por un prisma poligonal).

Actualmente estoy escribiendo el editor de niveles y tengo la necesidad de permitir que el usuario defina el área de colisión para cualquier mosaico dado. En la imagen a continuación, el usuario hace clic en los puntos P1, P2, P3, P4 en ese orden.

ingrese la descripción de la imagen aquí

Obviamente, los puntos se unen para formar un cuadrilátero. Esta es el área de colisión que quiero, sin embargo, debo convertirla en una malla 3D. Básicamente, necesito generar una extrusión del polígono, luego asignar el devanado del vértice y los triángulos, etc. Las posiciones de los vértices no son un problema para descifrar, ya que es simplemente una traducción del polígono hacia abajo del eje z.

ingrese la descripción de la imagen aquí

Tengo problemas para crear un algoritmo para asignar el orden de giro de los vértices, especialmente porque la malla debe consistir solo en triángulos.

Obviamente, la estructura que he ilustrado no es importante, el polígono puede tener cualquier forma 2d y siempre necesitará formar un prisma. ¿Alguien sabe algún método para esto?

Muchas gracias a todos por su tiempo.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Un algoritmo simple que viene a la mente es algo como esto:

 extrudedNormal = faceNormal.multiplyScale(sizeOfExtrusion);//multiply the face normal by the extrusion amt. = move along normal for each(vertex in face){ vPrime = vertex.clone();//copy the position of each vertex to a new object to be modified later vPrime.addSelf(extrudedNormal);//add translation in the direction of the normal, with the amt. used in the }

Así que la idea es básica:

  • clona la cara normal y muévela en la misma dirección por el amt. quieres extruir por
  • clone los vértices de la cara y muévalos usando la posición normal movida (extruida)

Para obtener un ejemplo más completo y rico en características, consulte las muestras de Unity de modelado de procedimientos . También incluyen una buena muestra de extrusión de malla (ver ExtrudedMeshTrail.js que usa MeshExtrusion.cs).

¡Buena suerte!

over 4 years ago · Santiago Trujillo Denunciar

0

Para crear las paredes extruidas:

Para cada vértice a (con coordenadas a x , a y ) en su polígono: - llame al siguiente vértice 'b' (con coordenadas b x , b y ) - cree el rectángulo extruido correspondiente a la línea de 'a' a 'b ': - El rectángulo tiene vértices (a x ,a y ,z 0 ), (a x ,a y ,z 1 ), (b x ,b y ,z 0 ), (b x ,b y ,z 1 ) - Este rectángulo se puede crear a partir de dos triángulos: - (a x ,a y ,z 0 ), (a x ,a y ,z 1 ), (b x ,b y ,z 0 ) y (a x ,a y ,z 1 ), (b x ,b y ,z 0 ), (b x ,b y ,z 1 )

Si desea crear una franja triangular en su lugar, es aún más simple. Para cada vértice a, solo suma ( ax ,ay , z 0 ) y ( ax ,ay , z 1 ). Cualquiera que sea el vértice que procesó primero, también deberá procesarse nuevamente después de recorrer todos los demás vértices.

Para crear las tapas finales:

Este paso es probablemente innecesario para fines de colisión. Pero aquí hay una técnica simple: http://www.siggraph.org/education/materials/HyperGraph/scanline/outprims/polygon1.htm Cada triángulo resultante debe agregarse en la profundidad z 0 y z 1 .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda