Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Loopen en 09 de Noviembre de 2002, 01:54:47 PM

Título: Velocidad ejecucion
Publicado por: Loopen en 09 de Noviembre de 2002, 01:54:47 PM
                                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?                                
Título: Velocidad ejecucion
Publicado por: bnl en 09 de Noviembre de 2002, 03:02:17 PM
                                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.                                
Título: Velocidad ejecucion
Publicado por: jpastor en 09 de Noviembre de 2002, 03:45:05 PM
                                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.                                
Título: Velocidad ejecucion
Publicado por: bnl en 09 de Noviembre de 2002, 03:59:28 PM
                                Echales un vistazo a estas paginas. En ellas se explican mas detalladamente las 2 tecnicas q te hemos comentado (sincronizacion por framerate y por tiempo)

http://vjuegos.cem.itesm.mx/pb/principios_basicos.html
http://vjuegos.cem.itesm.mx/pb/principios_..._basicos01.html
http://vjuegos.cem.itesm.mx/pb/principios_..._basicos02.html
http://vjuegos.cem.itesm.mx/pb/principios_..._basicos03.html                                
Título: gametutorials
Publicado por: AgeR en 09 de Noviembre de 2002, 04:23:08 PM
                                Hola! En http://www.gametutorials.com hay un ejemplo de como conseguir lo que pides, saludos!                                
Título: Velocidad ejecucion
Publicado por: Astat en 09 de Noviembre de 2002, 07:01:31 PM
                                Hay va un link mas:

http://www.flipcode.com/cgi-bin/msg.cgi?sh...orum=totd&id=-1

Un post de Jare hablando sobre el tema, bien explicado y con mucho codigo.

Saludos.                                
Título: hm
Publicado por: CoLSoN2 en 09 de Noviembre de 2002, 08:07:08 PM
                                ¿Que significa TICK? XD                                
Título: Velocidad ejecucion
Publicado por: bnl en 09 de Noviembre de 2002, 08:23:38 PM
                                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                                
Título: Velocidad ejecucion
Publicado por: NeLo en 10 de Noviembre de 2002, 05:36:53 PM
                                Un tick no es un milisegundo.

Los ticks por segundo depende del sistema.                                
Título: Velocidad ejecucion
Publicado por: bnl en 10 de Noviembre de 2002, 06:35:01 PM
                                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.                                
Título: Velocidad ejecucion
Publicado por: fiero en 10 de Noviembre de 2002, 06:57:29 PM
                               
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                                
Título: Velocidad ejecucion
Publicado por: MChiz en 11 de Noviembre de 2002, 01:25:48 AM
                                Entonces usad timeGetTime( ) o QueryPerformanceCounter( ) :b
Un saludete!