Actualmente estoy jugando con XNA y creando un simple juego de plataformas en 2D. Estaba pensando en agregar varias capas para que sea un poco desafiante.
En lugar de tener un Vector2para mis posiciones, ahora uso un Vector3, solo para usarlo Zcomo profundidad de capa. Sin embargo, dado que no puedes usar operadores entre Vector2y Vector3por alguna razón desconocida [1] , terminé cambiando todos los demás Vector2s en mi juego, como la aceleración , la velocidad y el desplazamiento , por lo que puedo hacer cosas como position += offsetsin errores.
También cambié mi variable de rotación de floata Vector3, y uso el Zvalor para rotar mis texturas. Estoy planeando usar Xy Yvoltear mis texturas a escala, para que obtengas el efecto Super Paper Mario.
Sin embargo, después de cambiar todas estas Vector2s en Vector3s, me sentí un poco mal por eso. ¿Cómo afecta esto el rendimiento de los juegos? Sé que no debería tener que preocuparme por el rendimiento en mi pequeño juego de plataformas, pero tengo curiosidad por eso.
¿Hay alguna rendimiento notable entre Vector2s y Vector3s, por ejemplo, al añadir o multiplicándolos, o al llamar Normalize, Transformo Distance?
[1] Solo una pregunta secundaria, ¿por qué no hay operadores para los cálculos entre Vector3 y Vector2?
fuente

Estás tratando de optimizar prematuramente. La mayoría de las operaciones que mencionó (normalizar, transformar, distancia) son prácticamente idénticas a las que hace vector2D, si puede ver su código, notará que son prácticamente iguales. La única diferencia es que vector3D tiene un tercer eje. En cuanto al rendimiento, debería ser trivial en comparación con un Vector2D.
En cuanto a su pregunta paralela:
porque no puede multiplicar matrices / vectores de fila / vectores de columna que tienen dos tamaños diferentes.
fuente
Uno de los mayores efectos de rendimiento del uso
Vector3innecesario, en lugar deVector2, es el aumento del 50% en el tamaño y el efecto que tiene en la memoria caché .Es necesario cargar esos datos adicionales innecesarios en la memoria caché de la CPU desde la memoria principal. Esto es muy lento .
Además, al cargar estos datos innecesarios, aumenta la posibilidad de que esté sacando datos útiles que inmediatamente deben volver a cargarse en la memoria caché.
En un bucle modestamente ajustado, los efectos de caché abrumarán cualquier efecto de CPU de realizar operaciones adicionales.
Además, es más rápido agregar los elementos directamente (debido a varias peculiaridades de .NET). Entonces, si está micro optimizando, no utilizará las operaciones vectoriales de todos modos. Entonces, si solo necesita agregar los dos primeros elementos de un vector, puede hacer esto:
Pero este tipo de consideraciones de rendimiento solo son realmente aplicables a cosas como motores de partículas, motores de física, etc. ¡Así que no te preocupes demasiado!
fuente