promediar las ubicaciones de los píxeles para encontrar una superficie normal. (2D)

Estoy trabajando en un juego 2D en XNA que necesita algo de física. He descubierto que los motores de física como Farseer no lo cortan debido a algunas de las formas en que funcionan. (esa es una larga historia que implica reescribir el código 3 veces para finalmente darme cuenta de que necesitaba escribir la física yo mismo). Entonces, de acuerdo con el material de referencia que estoy usando, los únicos datos que necesito ahora son una normal para la superficie de colisión.

Esto está usando la detección de colisiones por píxel usando sprites. Actualmente tengo una matriz de todos los píxeles superpuestos y sus ubicaciones. Me gustaría usar esos datos para promediar de alguna manera las ubicaciones de los píxeles superpuestos para averiguar lo normal para esa superficie. esto debería permitirme tener colisiones con objetos de forma irregular pero aún así mantener una interacción física realista.

Si alguien tiene una sugerencia sobre cómo podría usar esta información de píxeles para averiguar la superficie normal o algo lo suficientemente cerca, sería genial.

Gracias.

preguntado el 16 de mayo de 11 a las 16:05

3 Respuestas

Consideró almacenar normales para cada punto en sus sprites (es decir, en una textura separada) en lugar de intentar calcularlos. De esta forma podrás ajustar las normales para que tus colisiones se vean "naturales" (en el sentido de tu juego, no necesariamente correcto desde el punto de vista de la física).

contestado el 16 de mayo de 11 a las 22:05

Tu sugerencia es intrigante. Sin embargo, ¿podría explicar cómo se almacenarían las normales en una textura y cómo se accedería a ellas? No tengo claro este detalle. - APalmer

Normal es solo uno o dos (en el espacio 2D) o 2/3 números flotantes. Por lo que se puede almacenar fácilmente en una textura (ver msdn.microsoft.com/en-us/library/… para posibles formatos de textura). Busque muestras de "mapeo normal" para ver cómo se usa comúnmente (p. Ej. create.msdn.com/en-US/education/catalog/sample/normal_mapping). El sombreador de píxeles puede acceder a múltiples texturas al mismo tiempo, por lo que fusionar datos de varias texturas es razonablemente fácil. - Alexei Levenkov

[Editado] - Me gusta más la idea de sprites normales de Alexei que mi enfoque basado en tablas, pero aún agregaría ...

Es posible que desee considerar la posibilidad de adjuntar una geometría 2D a cada objeto. Le dará la capacidad de hacer una colisión real de polígonos. Cuando determine una colisión de sprites, observe el polígono de los dos sprites y aplíqueles la física de colisión estándar.

contestado el 16 de mayo de 11 a las 21:05

Esto podría funcionar: encuentre los dos píxeles más ofensivos (uno para cada cuerpo) y aplique un resorte temporal entre ellos para separarlos. Básicamente, cualquier combinación de píxeles que tenga la mayor superposición (opuesta a la separación) y aplique una fuerza proporcional a la cantidad de superposición. Esto agregará energía a su sistema, así que considere agregar un amortiguador (fuerza proporcional a la velocidad relativa) también. Las ecuaciones que utilizo a menudo son:

(reduced mass) = 1/( 1/(mass 1) + 1/(mass 2) )
(stiffness) = (reduced mass) * (response freq)^2
(damping) = (ratio)*(reduced mass) * (response freq)

y yo controlo el (response freq) y (ratio) cantidad para obtener el efecto deseado. La frecuencia de respuesta es la rapidez con la que desea que se corrija la superposición, y la "relación de amortiguación" es un número positivo que puede ser menor o mayor que uno que le permitirá ajustar su respuesta de amortiguación.

contestado el 16 de mayo de 11 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.