µLua DS - Forum officiel | Official forum Forum Index

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister   ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Image : transformations
Goto page: <  1, 2, 3, 4  >
 
Post new topic   Reply to topic    µLua DS - Forum officiel | Official forum Forum Index -> Section française -> Report de bugs
Previous topic :: Next topic  
Author Message
thermo_nono
Modérateur

Offline

Joined: 31 Dec 2008
Posts: 2,415
Localisation: La Géhenne

PostPosted: Thu 29 Jan 2009 - 13:31    Post subject: Image : transformations Reply with quote

^^
_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Back to top
Visit poster’s website MSN
Publicité






PostPosted: Thu 29 Jan 2009 - 13:31    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Risike
Administrateur

Offline

Joined: 26 Aug 2008
Posts: 362
Localisation: Nancy (54)

PostPosted: Tue 10 Mar 2009 - 10:16    Post subject: Image : transformations Reply with quote

En fait la teinte est quelque chose de permanent sur une image. La rotation et le scaling ne le sont pas. C'est comme ça que Brunni a conçu sa librairie je n'ai pas envi de la bidouiller. Il faut donc répéter les opérations de changement de forme dans chaque boucle. Ceci ne pose aucun problème étant donné que se sont des opérations très rapides à exécuter.

les fonction width() et height() renvoient la taille de l'image d'origine chargée et non celle de l'image modifiée, c'est voulu. A vrai dire si tu fais un scale(x, y) tu sais que la taille de l'image est x, y... Pour les rotations c'est plus complexe.
_________________
Qu'est-ce que tu bois ? Du blanc !
Mais ça compte pas le blanc !


Back to top
Ced-le-pingouin


Offline

Joined: 16 Jan 2009
Posts: 559
Localisation: Belgique

PostPosted: Tue 10 Mar 2009 - 15:41    Post subject: Image : transformations Reply with quote

Depuis mon post original, j'ai compris la raison d'être et le fonctionnement de pas mal de choses relatives aux images, mais ce qui reste vrai chez moi, c'est que contrairement à la rotation qui est appliquée durablement, le scale() n'est pas réinitialisé à chaque boucle, mais bien à chaque blit() (si je me souviens bien). J'ai d'ailleurs reproduit ce comportement dans mon simulateur. Un exemple de cela est le script où on peut faire tourner un carré rouge et blanc, et le faire (dé)zoomer. La rotation est permanente, tandis que que le scaling pas

Sinon, tant que tu es sur le forum, j'ai une question pour toi Risike. J'ai bien compris que les FPS d'affichage étaient bloqués sur 30 (double écran 3D de la DS oblige), mais qu'en est-il des FPS "internes", sont-ils également bloqués à une valeur fixe ou pas?

Je m'explique (enfin j'essaie):
  • NB_FPS vaudra toujours 30, sauf si on tente d'effectuer trop d'opérations en 1/30ème de seconde. Normal, c'est prévu comme ça
  • Par contre, en supposant qu'on n'affiche quasi rien dans la boucle (par exemple un point ou un petit sprite), combien d'itérations de boucle seront exécutées en une seconde? Y a-t-il une constante, ou est-ce que c'est "autant que la DS le permet" ? Par exemple, si j'incrémente simplement une variable dans une boucle qui contient un Controls.read() et des start/stopDrawing(), à combien sera la variable après une seconde ? Apparemment, c'est + que 30. Je me souviens avoir enregistré combien de temps mettait un sprite pour aller du centre de l'écran jusqu'au bord droit en se déplaçant d'un pixel à chaque itération, et en calculant "<nombre de pixels parcourus> (128) / <temps nécessaire> (2.32secs sur la DS)", j'obtenais 55fps (dans ce cas-ci, on pourrait dire 55 itérations/sec). Du coup je me demandais si Controls.read(), startDrawing() ou stopDrawing() jouent (en interne) un rôle de limiteur à 55 ou 60fps, ou si les programmes s'exécutent simplement aussi vite qu'ils le peuvent, et dans ce cas-ci c'est 55ips (et par exemple quand il y aura + d'opérations dans la même boucle ça pourra être 50, 40, ou 30 itérations/sec)
Pour moi c'est important à deux niveaux, le 1er est simplement que si la boucle n'est pas limitée en vitesse, lorsqu'on veut faire un jeu à vitesse constante, on doit limiter la vitesse de la boucle soi-même (logique, pas de problème), la seconde raison est pour programmer mon simulateur, qui comme il tourne sur PC, aura une vitesse complètement différente du vrai Micro Lua, et d'un ordi à l'autre, sauf si je le "bloque" en interne à une vitesse fixe pour ce qui est des itérations de boucle.

Voilà, c'était la question lourde et technique du jour Mr. Green


Back to top
Risike
Administrateur

Offline

Joined: 26 Aug 2008
Posts: 362
Localisation: Nancy (54)

PostPosted: Tue 10 Mar 2009 - 17:56    Post subject: Image : transformations Reply with quote

Voici comment je calcul ce NB_FPS :

La mise à jour ce fait dans le stopDrawing(). En gos j'ai un timer qui tourne en continue. A chaque stopDrawing() j'incrémente un nombre .Toute les secondes je regarde a combien il est.



Code:

NB_FPS = 30
NB_FPS_COUNTER = 0
tmrFpsCounter = Timer.new()
tmrFpsCounter:start()

stopDrawing = function()
        -- Count FPS
        if mustCountFPS then
            NB_FPS_COUNTER = NB_FPS_COUNTER + 1
            mustCountFPS = false
        else
            mustCountFPS = true
        end
        if tmrFpsCounter:time() >= 1000 then
            NB_FPS = NB_FPS_COUNTER
            NB_FPS_COUNTER = 0
            tmrFpsCounter:reset()
            tmrFpsCounter:start()
        end
        -- Draw debug console
        if Debug.isDebugOn then
            screen.drawTextBox(SCREEN_DOWN, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Debug.debugText, Debug.debugColor)
        end
        screen.endDrawing()
        screen.waitForVBL()
end

reen.waitForVBL()
    end
_________________
Qu'est-ce que tu bois ? Du blanc !
Mais ça compte pas le blanc !


Back to top
Ced-le-pingouin


Offline

Joined: 16 Jan 2009
Posts: 559
Localisation: Belgique

PostPosted: Tue 10 Mar 2009 - 18:45    Post subject: Image : transformations Reply with quote

Ok, en fait je suppose que c'est screen.waitForVBL() qui assure les 30fps constants, au niveau affichage.

Mais en dehors de ça, il n'y donc pas d'autre limitation/temporisation, je veux dire, les boucles dans nos programmes tournent à la vitesse maximale autorisée par la DS (donc en fonction de ce qu'on y fait, si c'est lourd ou pas) ?


Back to top
Risike
Administrateur

Offline

Joined: 26 Aug 2008
Posts: 362
Localisation: Nancy (54)

PostPosted: Tue 10 Mar 2009 - 19:19    Post subject: Image : transformations Reply with quote

Oui mais comme tu l'as dit le waintForVBL attent que l'écran soit totalement dessiné. ça limite donc à 30 FPS (mode 3D). Mais dans une boucle sans dessins c'est comme dans tout langage, ça tourne au maximum des capacités de la DS. Je ne penses pas que tu arrives à faire un système de temporisation parfaite. Mais vu que j'ai mis un système de timers, les développeurs sont censés les utiliser pour afficher des animations. Si tu arrive à émuler ce système de timers (je te file le code Lua si tu veux) et que tu arrives à limiter tes boucles d'affichage à 30 FPS les programmes tourneront parfaitement. Au pire les temps de chargements seont plus courts !
_________________
Qu'est-ce que tu bois ? Du blanc !
Mais ça compte pas le blanc !


Back to top
Ced-le-pingouin


Offline

Joined: 16 Jan 2009
Posts: 559
Localisation: Belgique

PostPosted: Tue 10 Mar 2009 - 20:12    Post subject: Image : transformations Reply with quote

Re,

Merci beaucoup pour tes explications.

Le système de timers est déjà émulé dans le simulateur, et l'affichage se fait pour le moment à 50 ou 60 fps (dans la v0.3 que je suis en train de finaliser), mais à la limite la vitesse d'affichage n'a pas trop d'importance sur le PC.

Par contre, je suis d'accord avec toi sur le fait que c'est le programmeur qui devrait utiliser les timers pour gérer la boucle et la faire fonctionner à vitesse constante. Mais dans la plupart des scripts de test existants, débuts de projets, exemples etc., la boucle n'est pas contrôlée. Et comme sur un PC puissant, mon simulateur pourrait passer dans la boucle 500x/sec ou +, les scripts existants tourneraient à une vitesse folle, donc je compte aussi "bloquer" la boucle artificiellement à 50 ou 60 fps. A la limite y aurait une touche dans le simu pour activer/désactiver ce blocage ou en changer la vitesse, pour se rapprocher du résultat du vrai Micro Lua


Back to top
Risike
Administrateur

Offline

Joined: 26 Aug 2008
Posts: 362
Localisation: Nancy (54)

PostPosted: Wed 11 Mar 2009 - 08:48    Post subject: Image : transformations Reply with quote

Dans une boucle "normale" sans affichage ça n'est pas grave. Si tu as déjà émulé le système de timers la seule chose à faire et de limiter l'affichage à 30 FPS au moment du stopDrawing(). Tu utilises wxWidget... je ne connais pas bien.
Mais si ton affichage est plus rapide que celui de la DS il suffit simplement de faire un sleep(1000/30) (en millisecondes) dans ton stopDrawing(). ça devrait suffire..
En tout cas si tu as besoin de bouts de code pour améliorer ton projet (qui déchire !) n'hésite pas ! Je peux déjà t'envoyer le système de Wifi. D'ailleurs c'est des socket Unix.
_________________
Qu'est-ce que tu bois ? Du blanc !
Mais ça compte pas le blanc !


Back to top
Risike
Administrateur

Offline

Joined: 26 Aug 2008
Posts: 362
Localisation: Nancy (54)

PostPosted: Wed 11 Mar 2009 - 20:23    Post subject: Image : transformations Reply with quote

OULAAA !!!

Je viens de comprendre ce dont tu parlais pour les rotations et les scale. ça passait en 1.0 et là en 2.0 ça ne passe plus. J'ai regardé l'exemple avec le drapeau rouge et noir. Merde faut que je trouve d'où ça vienne !
_________________
Qu'est-ce que tu bois ? Du blanc !
Mais ça compte pas le blanc !


Back to top
[TheDarkTiger]


Offline

Joined: 25 Oct 2008
Posts: 264

PostPosted: Wed 11 Mar 2009 - 20:29    Post subject: Image : transformations Reply with quote

sinon, question stupide...

est-ce normal que certaines transformations (comme la mise à échèle) ne restent pas quand on ne blitte qu'une partie de l'image?


Back to top
Ced-le-pingouin


Offline

Joined: 16 Jan 2009
Posts: 559
Localisation: Belgique

PostPosted: Wed 11 Mar 2009 - 23:37    Post subject: Image : transformations Reply with quote

Merci pour la proposition des bouts de code et du Wifi. Quand j'aurai implémenté les polices et le son, je m'attaquerai sans doute à cette partie.

Ah, il me semblait bien qu'il était bizarre, ce script du drapeau rouge et blanc Laughing


Back to top
Risike
Administrateur

Offline

Joined: 26 Aug 2008
Posts: 362
Localisation: Nancy (54)

PostPosted: Thu 12 Mar 2009 - 09:22    Post subject: Image : transformations Reply with quote

Rouge et noir !
_________________
Qu'est-ce que tu bois ? Du blanc !
Mais ça compte pas le blanc !


Back to top
Ced-le-pingouin


Offline

Joined: 16 Jan 2009
Posts: 559
Localisation: Belgique

PostPosted: Thu 12 Mar 2009 - 09:58    Post subject: Image : transformations Reply with quote

Ah, moi aussi j'ai buggé  Mr. Green

Back to top
Risike
Administrateur

Offline

Joined: 26 Aug 2008
Posts: 362
Localisation: Nancy (54)

PostPosted: Thu 12 Mar 2009 - 10:06    Post subject: Image : transformations Reply with quote

Je t'ai envoyé un MP
_________________
Qu'est-ce que tu bois ? Du blanc !
Mais ça compte pas le blanc !


Back to top
killer01


Offline

Joined: 04 Oct 2008
Posts: 545

PostPosted: Thu 12 Mar 2009 - 12:11    Post subject: Image : transformations Reply with quote

ah oui c'est vrai qu'il y avait un problème avec ce drapeau^^

Back to top
Display posts from previous:   
Post new topic   Reply to topic    µLua DS - Forum officiel | Official forum Forum Index -> Section française -> Report de bugs All times are GMT + 1 Hour
Goto page: <  1, 2, 3, 4  >
Page 2 of 4

 
Jump to:  

Index | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group