Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

214
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda