Como mi código es una guarrada ¡está en c! (Si, si, yo también he dao ingeniería del SW y se las ventajas de la POO, pero es que lo empecé antes de aprender C++, y como soy tan vago, por no cambiarlo todo...), pues mejor pongo algo de pseudocódigo, además, las funciones son grandes y no quiero quitaros mucho tiempo, tendréis cosas mejores que hacer. Bueno como he dicho antes, lo he resuelto de una forma que no se si es la correcta:
// En el loop principal del juego llamo a la func. ActualizaSistema
glutIdleFunc(ActualizaSistema);
//...
funcion ActualizaSistema ()
{
tSeg <- tiempo transcurrido desde la última llamada
Obtengo la entrada por teclado y ratón (acelreac. de la cámara, rotaciones de la cámara...)
Roto la cámara según el ratón
// Aquí está la chapucilla
// Lo del 5 es temporal, debería ser una variable que se ajuste a una frecuencia fija para el cálculo de
// colisiones, o que dependiese de la longitud del vector desplazamiento que se utilizará para las colis.
FraccionT=tSeg/5.0f;
para f<-0 hasta 5 hacer
{
// Calculo fracciones de tiempo menores, con lo que el vector de
// desplazamiento (S = S0 + v0*t + .5 * a * t*t) que se calculará en la func. mueveCamara
// será menor y evitaré los problemas de colis.
// Aquí llamo a la función que mueve la cámara. y lo hace de forma que respete las colis.
// tiempo, gravedad ON, tipo de colis (AABB/Tri)
mueveCamara(FraccionT, GRAVIDEZ , AABB_COLIS);
}
Calculamos FPS
Renderizamos la escena
}
Así parece que funciona y no atraviesa ningún polig. pero como he dicho antes, no se comporta igual: en las colis. parece que se ralentiza algo. No se si es porque esto que hago es erróneo, o porque al calcular mas colisiones aplico mayor nº de veces la fuerza de rozam. o porque sobrecargo la CPU con tantas llamadas y calculos en la función de colis.
Bueno y en relación con lo del 5 temporal en FraccionT y el bucle: es mejor que sea un frecuencia cte. y calculemos el nº de iteraciones según el tiempo transcurrido, o por el contrario es mejor calcular la distancia a recorrer en este frame, y según su módulo, calcular el nº de loops (porque lo que realmente afecta a la eficacia de los cálculos son los vectores velocidad extremadamente grandes ¿no?)
// En el loop principal del juego llamo a la func. ActualizaSistema
glutIdleFunc(ActualizaSistema);
//...
funcion ActualizaSistema ()
{
tSeg <- tiempo transcurrido desde la última llamada
Obtengo la entrada por teclado y ratón (acelreac. de la cámara, rotaciones de la cámara...)
Roto la cámara según el ratón
// Aquí está la chapucilla
// Lo del 5 es temporal, debería ser una variable que se ajuste a una frecuencia fija para el cálculo de
// colisiones, o que dependiese de la longitud del vector desplazamiento que se utilizará para las colis.
FraccionT=tSeg/5.0f;
para f<-0 hasta 5 hacer
{
// Calculo fracciones de tiempo menores, con lo que el vector de
// desplazamiento (S = S0 + v0*t + .5 * a * t*t) que se calculará en la func. mueveCamara
// será menor y evitaré los problemas de colis.
// Aquí llamo a la función que mueve la cámara. y lo hace de forma que respete las colis.
// tiempo, gravedad ON, tipo de colis (AABB/Tri)
mueveCamara(FraccionT, GRAVIDEZ , AABB_COLIS);
}
Calculamos FPS
Renderizamos la escena
}
Así parece que funciona y no atraviesa ningún polig. pero como he dicho antes, no se comporta igual: en las colis. parece que se ralentiza algo. No se si es porque esto que hago es erróneo, o porque al calcular mas colisiones aplico mayor nº de veces la fuerza de rozam. o porque sobrecargo la CPU con tantas llamadas y calculos en la función de colis.
Bueno y en relación con lo del 5 temporal en FraccionT y el bucle: es mejor que sea un frecuencia cte. y calculemos el nº de iteraciones según el tiempo transcurrido, o por el contrario es mejor calcular la distancia a recorrer en este frame, y según su módulo, calcular el nº de loops (porque lo que realmente afecta a la eficacia de los cálculos son los vectores velocidad extremadamente grandes ¿no?)