Archives

Articles ayant le tag ‘OpenGL’

eBALLution

8 décembre 2009

Cela fait déjà quelque temps que je développe un petit jeu vidéo pour Mac OS X, histoire d’apprendre quelques technologies telles que OpenGL, Cocoa… ça change de Java, HTML et CSS ! Le moteur est maintenant assez avancé pour que j’ose en parler.

Le jeu s’appelle eBALLution. C’est un casse-brique qui vous fera voyager dans le temps afin de vous faire (re)découvrir l’histoire de la vie et de l’Homme : de la création de l’Univers et de notre chère planète Terre jusqu’à la vie de tous les jours, en passant par les dinosaures, l’Antiquité, le Moyen-Âge, les grandes découvertes, … Ce jeu sera gratuit, mais j’accepterai avec plaisir les dons :-)

Le jeu a déjà son site internet, eballution.com, sur lequel je publierai des articles lors de mes grandes avancées dans le développement.

Rien n’est encore définitif, mais voici tout de même quelques images des niveaux de test déjà existants :

Je prévois de sortir une version beta pour la fin de l’année… prochaine (2010). Eh oui, ça demande du temps de confectionner et peaufiner les différents niveaux, surtout que j’en ai prévu un nombre assez important. C’est qu’il y a 13,8 milliards d’années à retracer !

AnnoncesDéveloppementLogicielsMac

Cheetah3D : un modeleur 3D pour Mac OS X

30 janvier 2009

Logo du logiciel Cheetah3DJe connaissais Cheetah3D depuis un petit moment déjà, je l’avais essayé en version d’évaluation. Ce logiciel de modélisation 3D a été écrit spécialement pour Mac OS X : l’interface est agréable, claire et simple. La puissance de l’outil est assez impressionnante, surtout lorsque l’on sait que le logiciel ne vaut que… 149 $ ! C’est vraiment peu cher comparé aux ténors que sont 3ds Max (3495 $), Maya (1995 $) ou encore Cinema4D (995 $) dans leurs versions les moins chères. Cheetah3D n’est peut-être pas aussi complet et puissant, mais il permet toutefois de faire de belles choses (je trouve). Étant donné que je suis en train d’essayer de créer un petit jeu avec OpenGL, j’ai acheté Cheetah3D. À l’occasion de son cinquième anniversaire, Cheetah3D est en promotion en ce moment à 99 $ (soit 83 € TTC). Du coup, j’ai aussi acheté le didacticiel de 4 heures en vidéo haute définition, en anglais (27 € TTC). Et je ne suis pas déçu ! Bref, si vous voulez faire de la 3D et que vous êtes sous Mac, n’hésitez pas à soutenir l’unique développeur de ce logiciel !

LogicielsMac

Dessiner dans une NSView

4 janvier 2009

Dans Interface Builder, sélectionnez la vue en question et, dans l’onglet Identity de l’Inspecteur, indiquez un nom de classe pour votre vue dans le champ Class (par exemple : GameView). Sélectionnez File > Write Class Files… dans le menu principal de Interface Builder pour générer cette classe dans le projet.

De retour dans XCode, ouvrez le fichier de déclaration de cette classe (GameView.h) et faites étendre la classe de NSView :

@interface GameView : NSView {
   NSImage *background;
}
@end

Ensuite, éditez le fichier d’implémentation de la classe (GameView.m) et implémentez la méthode -drawRect: :

- (void)awakeFromNib {
   // La variable "background" est déclarée dans le fichier header (.h).
   background = [NSImage imageNamed:@"background.png"];
}
 
- (void)drawRect:(NSRect)rect
{
   [background dissolveToPoint:NSMakePoint(0, 0) fraction:1.0];
}

Notez que l’image est initialisée dans la méthode -awakeFromNib, qui est appelée lors de l’initialisation de la vue.

Pour animer le contenu de la vue, et donc pour forcer le rafraîchissement de la vue, il est possible d’utiliser un NSTimer pour indiquer à la vue qu’elle doit se re-dessiner :

- (void)awakeFromNib {
   background = [NSImage imageNamed:@"background.png"];
   [NSTimer
      scheduledTimerWithTimeInterval:0.01
      target:self
      selector:@selector(refresh:)
      userInfo:nil
      repeats:YES];
}
 
- (void)refresh:(NSTimer*)timer {
   [self setNeedsDisplay:YES];
}

La méthode -refresh: sera appelée toutes les 0,01 seconde (100 fois par secondes, donc) et demandera à la vue de se re-dessiner, via l’appel à setNeedsDisplay:YES. Évidemment, ceci n’a de sens que si l’image (ou sa position) change.

Côté performances, j’ai fait quelques tests : j’affiche 1000 fois la même image (26×26 pixels) toutes les 0.01 seconde en la décalant de 1 pixel et ça ne gêne pas du tout mon iMac, l’animation est impeccable !

Je précise que ce n’est pas ici une technique très avancée pour animer du contenu, car cela ne tient pas compte de la puissance de la machine. En vérité, dans la méthode -refresh:, il faudrait vérifier si l’image doit être déplacée (ou modifiée) en fonction du temps qui s’est écoulé depuis la dernière modification de cette image. Ainsi, peu importe la résolution du timer utilisée, ou la capacité de la machine à afficher du contenu graphique, l’image sera toujours correcte (en fonction du temps écoulé), même si l’animation n’est pas fluide. Il est aussi possible d’utiliser NSAnimation pour des animations complexes « finies ».

Pour terminer, si votre but est de faire de l’animation complexe (2D ou 3D), comme pour la programmation d’un jeu, je ne peux que vous conseiller de vous tourner vers OpenGL. Je suis en train de m’y mettre, je publierai donc prochainement des articles à ce propos.

CocoaDéveloppementMacTutoriels