samedi 28 avril 2012

22# AUUGH

Coucou.
J'ai dessiné ça sur paint, en partie avec mon extension que je m'étais programmée. Ça m'a donné envie de l'améliorer, et en parallèle j'ai commencé à apprendre à utiliser Qt (une bibliothèque C++ axée sur la création de fenêtres). Je vais donc peut-être finalement y ajouter quelques fonctionnalités et lui faire une belle GUI...
Concernant le moteur de voxels: j'ai implémenté le rendu par display list, mais il s'avère que l'approche pour le stockage de voxels dans un tableau tridimensionel n'est pas une idée si lumineuse que ça. Il se trouve que la majorité du temps, seuls environ 25% des "cases" du tableau sont remplies avec un voxel effectivement solide, le reste représente de l'air, du vide et n'est pas représenté graphiquement, mais prend néanmoins de la place en mémoire. Alors le rendu avec les display accélère effectivement l'affichage, mais le volume occupé en mémoire est ingérable (j'ai peur de dire une bêtise, je sais plus ce que ça représente, mais c'est beaucoup) pour un terrain de seulement, mettons 300*300*300 voxels. Je vais donc tenter une autre manière de stocker mes voxels: les 'map'. Il faut que j'en apprenne d'avantage avant d'aller plus loin, mais ça a l'air plus efficace et j'en parlerai quand j'en saurais plus. Si toutefois une personne pouvant m'aiguiller lit ces lignes, qu'elle se manifeste s'il vous plaît; je n'ai pas trouvé de ressources ou exemples satisfaisants sur internet, et j'ai du mal à distinguer la différence entre map, unordered_map, table de Hash, faut-il préférer boost::map ou std::map, sont-ce les mêmes ? Voilà. Pour les images c'est toujours pareil: clique pour agrandir :]

samedi 14 avril 2012

21# Projets avortés

J'ai décidé de vous montrer quelques projets jamais finis, souvent commencés avec enthousiasme, mais finalement abandonnés.
1:Projet de site
Y'a un petit moment j'avais projeté de me faire mon propre site internet. Ça c'est pas fait car je ne peux pas me payer un nom de domaine. Ce que vous voyez là est une maquette, c'est à dire que je l'ai dessinée. J'avais pas encore commencé le dévellopement à proprement parler.
2:Hamburgore
Vous vous rappelez surement de Hamburgore, un petit projet autour duquel j'avais fait un peu trop de teasing :]. En fait j'avais tout simplement pas le niveau pour faire ce genre de choses à l'époque, et j'ai pas envie de reprendre ça maintenant donc depuis je le laisse là ou c'en est: c'est à dire rien de bien impressionant, mais j'avais quand même commencé le menu :D !
pour tester le menu, go là: Menu Hamburgore
Ou là lien n°2 , mais là ça prend toute la page donc ça va être plus lent...

... Il se peut que le fichier prenne du temps à charger, soyez patient :]
Et ça ira pour aujourd'hui. J'ai une quantité inimaginable de jeux flash ou de projet de programmes qui auraient pu être prometteurs mais que j'ai jamais eu le courage de continuer tout seul ou de dessins qui mériteraient d'être finis mais qui sont oubliés dans les tréfonds de mon ordinateur, mais ça constitue quand même des ressources réutilisables donc c'est pas perdu /o/



samedi 7 avril 2012

20#

Salut et je

lundi 2 avril 2012

19# Voxels - 2


Quelques tests, je m'amuse avec le moteur :D. Je pense quand même reprendre tout le code depuis le départ et repenser la structure du programme pour avoir de meilleures performances et un FPS décent.

dimanche 1 avril 2012

18# Moteur de terrain en voxels



J'ai commencé il y a peu à travailler sur un moteur de terrain en voxels, dans le but de faire un jeu dont la nature n'est pas encore tout à fait définie (je programme toujours en C++, avec OpenGl et SFML). Pour l'instant vous pouvez vous régaler de ces images, je posterai probablement une vidéo plus tard.


Les voxels, depuis l'épidémie de minecraft, vous en avez probablement déja entendu parler: c'est tout bêtement une entitée basique contenant quelques informations (Position, couleur, texture) et graphiquement représentée par un cube. Un voxel dans un espace en trois dimension est comparable à un tile ou un pixel dans un espace en deux dimensions. Toutefois je ne compte pas faire une énième pâle copie de minecraft, et j'ai choisi le voxel car c'est simplement un moyen pratique de travailler en 3D, et que son rendu donne un certain côté rétro que j'aime beaucoup.
Au niveau du fonctionnement, dans le principe, je stocke mes voxels dans un tableau tridimensionnel. Visualisez un tableau qui comporte des cases dans les trois dimensions:

Chaque case de ce tableau contient des informations de couleurs uniquement (je ne compte pas utiliser de texture). Ici nous avons un tableau de 3*3*3 voxels. Les coordonées des informations dans le tableau constituent par la même occasion les  coordonnées du voxel correspondant. On appelle un voxel de la façon suivante pour accéder ou modifier ses propriétés: tableau3D[i][j][k], où i j et k sont des indices permettant de parcourir le tableau. La structure du prorgamme est plutôt simple à concevoir, à partir de là il suffit, à chaque raffraichissement d'image d'afficher graphiquement un cube aux coordonnées dites du tableau et avec les propriétés indiquées.
Seulement les choses se compliquent vite: avec cette méthode, si je veux afficher ce cube de 3*3*3 voxels, tout va bien, mais en pratique il me faudrait afficher plusieurs centaines de milliers de voxels à chaque frame. Or afficher tous ces voxels sans distinction prend beaucoup trop de ressources, même pour un ordinateur actuel normalement constitué, et au dela de plus ou moins 20*20*20 voxels, soit 8 000 voxels et donc 8 000*6 = 48 000 faces, le framerate chute à moins de 5 FPS, ce qui devient très vite injouable.
Il a donc fallu créer des algorithmes de tri, entre autres le plus évident: ne pas considérer les voxels déja entourés par six autres voxels (donc ceux dont toutes les faces sont cachées), et chez les autres voxels existants, ne pas afficher les faces en contact avec une autre. Avec quelques autres modifications liées au dessin directement avec OpenGl, je parviens maintenant à afficher des zones de 100*100*100 voxels avec un framerate d'environ 15 FPS, ce qui est toujours très insuffisant.
Le terrain est destructible, et grâce à quelques algorithmes je peux facilement créer des formes géométriques simples (sphères, parallélépipèdes), et je planche sur un moyen de créer d'autres formes, comme des polygones réguliers (triangles, pentagones, etc ...) extrudés en hauteur. L'optimisation des performances n'est pas finie non plus et il faut que je me renseigne sur d'autres moyens d'affichage en OpenGl, comme les VBO, mais je n'en sais pas plus.
Je donnerai des nouvelles sur l'avancement de temps en temps.
Si vous avez des suggestions par rapport à ce projet je veux bien les entendre, et si quelqu'un s'y connait en OpenGl j'aimerai beaucoup qu'il m'explique quelques trucs :] !