Hola, queria saber como puedo hacer para que un programa OPENGL se ejecute igual de rapido en un ordenador que en otro (con un minimo en cuanto a ordenador claro), mi problema es que si programo algo con un ordenador y luego lo llevo a otro mas rapido el programa me va muy lijao.
Alguna sugerencia?
Yo lo que hago es fijar una velocidad, de X imagenes por segundo y hago q siempre valla a esa velocidad (cuando el ordenador es muy lento quiza no pueda llegar a esa velocidad). Para ello me meto en un bucle de espera. Te pego el codigo para q lo veas mas claro (me explico muy mal).
Public Sub buclePrincipal()
salir = False
Do While Not salir
'numTicks = GetTickCount
ActualizarJuego
Render
While GetTickCount - numTicks <= 16
DoEvents
Wend
DoEvents
Loop
End Sub
getTickCount es una llamada al API de windows que devuelve el numero de milisegundos transcurridos desde que se encendio el ordenador.
Yo creo que es mejor tener un bucle que haga todo en función del tiempo que ha pasado desde el último frame, algo como:
While (!bSalir)
{
TiempoActual = GetTickCount();
TiempoTranscurrido = TiempoActual - TiempoAnterior;
Objeto.PosicionX += TiempoTranscurrido;
RenderEscena ();
TiempoAnterior = TiempoActual;
}
Con esto consigues mover el objeto en el eje X a una velocidad de 1 unidad/milisegundo. Haciendo cosas como TiempoTranscurrido/1000 lo mueves a una velocidad de 1 unidad/segundo y cosas asi.
Hola! En
http://www.gametutorials.com hay un ejemplo de como conseguir lo que pides, saludos!
Hay va un link mas:
http://www.flipcode.com/cgi-bin/msg.cgi?sh...orum=totd&id=-1Un post de Jare hablando sobre el tema, bien explicado y con mucho codigo.
Saludos.
¿Que significa TICK? XD
No estoy seguro del todo pero creo q es cada "tick" que hace el reloj, la unidad minima que mide. Equivale a un milisegundo, es decir en un segundo habra 1000 ticks. Si estoy equivocado corregidme porfa
Un tick no es un milisegundo.
Los ticks por segundo depende del sistema.
Si, tienes razon. Los ticks dependen del sistema
La funcion GetTickCount devuelve el numero de milisegundos, NO el numero de Ticks como indica su numbre.
Asi q esta funcion nos puede servir para medir el tiempo.
CitarUn tick no es un milisegundo.
Los ticks por segundo depende del sistema.
Los ticks NO dependen del sistema. En todos los sistemas se ejecutan 18.2 ticks por segundo.
Esto de los ticks era más del ms-dos, ahora con los ordenadores tan rápidos se pueden medir hasta milisegundos, lo de "tick" es una reminiscencia del pasado :D, ya no se usa
Podían haber llamado a la función GetMillisecondsCount, pa no liar :jaja:
saludos
Entonces usad timeGetTime( ) o QueryPerformanceCounter( ) :b
Un saludete!