Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Velocidad ejecucion

Iniciado por Loopen, 09 de Noviembre de 2002, 01:54:47 PM

« anterior - próximo »

Loopen

                                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?                                

bnl

                                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.                                
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

jpastor

                                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.                                

bnl

                                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                                
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

AgeR

                                Hola! En http://www.gametutorials.com hay un ejemplo de como conseguir lo que pides, saludos!                                

Astat

                                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.                                

CoLSoN2

                                ¿Que significa TICK? XD                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

bnl

                                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                                
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

NeLo

                                Un tick no es un milisegundo.

Los ticks por segundo depende del sistema.                                
Drowning deep in my sea of loathing

bnl

                                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.                                
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

fiero

                               
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                                
www.videopanoramas.com Videopanoramas 3D player

MChiz

                                Entonces usad timeGetTime( ) o QueryPerformanceCounter( ) :b
Un saludete!                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.