La revue des projets - 105
Posté le 21/05/2018 19:04
Bonsoir à tous. La Revue des Projets continue irrégulièrement sa parution, mais toujours dans la joie et la bonne humeur.
Je vous rappelle que vous pouvez soumettre vos projets à la Revue des Projets en utilisant le
formulaire disponible sur la page d'accueil !
Aujourd'hui, nous avons deux projets à présenter ! Le premier nous vient d'Hackcell, qui remet au goût du jour un ancien langage orienté calculatrices, le Malical (
topic,
wiki). Après l'avoir porté avec succès pour les machines SH4, il lui construit ce qui lui manquait le plus : un bon tutoriel.
À toi la parole, Hackcell !
—
Les plus vieux et les plus curieux d'entre vous on peut-être déjà entendu parler du Malical, un langage de programmation créé par Lewis et Wudy spécialement pour les calculatrices Casio monochrome. Et si ce n'est pas le cas, pas d'inquiétude, car j'ai le plaisir de pouvoir vous annoncer la sortie d'un tutoriel sur l'utilisation de ce langage.
Pour ceux qui serait hésitant à apprendre un nouveau langage, laisser moi tenter de vous convaincre en vous expliquant les spécificités de ce dernier. Le Malical a été créé dans le but d'allier la simplicité du Basic Casio avec la vitesse du C. Ainsi, si vous trouver vos programmes en Basic trop lent, ce langage peut-être une alternative. Ou même si vous voulez apprendre à coder en C, mais que la quantité de travail nécessaire vous parait immense, le Malical peut faire office de marche intermédiaire afin de diviser cette apprentissage en parties plus petites.
Enfin, si je vous ai convaincus, ou même rendu curieux, n'hésitez pas à passer sur le topic du
tutoriel sur le Malical, il y a déjà la première leçon de disponible pour apprendre les bases du langage.
Et pour finir, je vous dis à bientôt dans une prochaine RDP, pour vous tenir au courant des sorties des nouvelles leçons.
—
Le 3D, c'est un peu un vieux rêve pour tous ceux qui ont programmé des calculatrices. Il y a eu pas mal de tentatives réussies, comme
Wolfenstein 3D de Kelli ou
Deadly World 3D de Nessotrin, utilisant le principe du raycasting. Pour avoir un moteur plus puissant, il a fallu attendre
Windmill de Ninestars et des prouesses techniques en cascade afin de rester dans des performances satisfaisantes.
Ce projet n'a pas été mis à jour depuis environ un an, mais Ninestars nous propose cette semaine quelques update. C'est ton tour, Ninestars !
—
Bonjour à tous,
me voici reparti sur
Windmill !
Depuis les deux dernières semaines, assez peu de changements visuels, surtout beaucoup de nettoyage, le code n'était pas propre, mais surtout certaines choses n'étaient pas clairs, je parle des repères principalement.
voici la liste des changements opérés ces dernières jours :
- nettoyage du fov, la valeur qui correspond à l'angle de vision, c'était un peu au pif avant.
- mise en const des variables de la map : les textures, les objets, les triangles et les rectangles.
- j'ai clarifié la précision des fixed (des nombres entiers utilisés comme des nombres à virgules) pour éviter les débordements, c'est surtout problématique pour les objets lointains, ou très proches car des variables s'approchent des limites d'un int.
Maintenant je suis certain qu'afficher un objet à la taille minimale (de taille 1) ne pose aucuns problèmes.
un cube de côté 1 :
un cube de coté 10, avec à sa droite le cube de coté 1.
(On voit le sol à partir de cette échelle, la distance entre les points est de 10)
L'histoire d'échelle est d'ailleurs très subjective, à combien correspond une taille de 10 si on veut la comparer au monde réel ? J'ai fait la proposition suivante : 1 = 10cm
- j'ai ajouté un repère 3D dans un coin de l'écran, c'est utile pour le debug.
- j'ai sorti la camera de la scène, c'est à dire que j'ai crée une classe juste pour la caméra. Maintenant on dessine la scène en 3D par rapport à une caméra
Scene scene;
Camera camera1
Camera camera2
...
scene.rendre_draw(&camera1)
- correction d'un problème dans le z-buffer (un tableau de la taille de l'écran enregistrant la distance des pixels par rapport à l'écran), j'avais un overflow, maintenant c'est tout propre !
- nettoyage divers dans le code
J'ai encore quelques points à nettoyer, puis je reprendrai les fonctionnalités, les prochaines qui seront implémentées seront :
- optimisation des objets à afficher à l'écran ou non (le gain de perf va être énorme sur ce coup)
- ajout d'un horizon (j'avais déjà commencé, mais c'est plus difficile que prévu, je pensais me contenter d'une image dont je n'affiche qu'une partie en fonction de l'angle de la caméra, mais en tournant et se déplaçant, ça ne rendait pas bien du tout par rapport aux objets "vraiment calculés")
- ajout d'un moteur physique simple (c'est sérieux, je sais déjà comment faire, normalement ça devrait se dérouler tout seul. Le principe : projeter chaque triangle sur le sol (le plan xy), ce qui donne des segments, puis gérer la collision entre ses segments et le vecteur vitesse du personnage)
- découper les triangles à la fois devant et derrière la caméra, en deux triangles uniquement devant la caméra pour qu'ils puissent être affichés. Pour l'instant cela élimine des triangles qui devrait pourtant être en partie visible
Voilà les principales nouveautés de Windmill ! Je continuerai à tenir le journal sur le topic du projet
—
Voilà qui nous fait une Revue des Projets bien remplie ! À la semaine prochaine !
Citer : Posté le 22/05/2018 12:07 | #
Désolé de ne pas avoir réagi plus tôt.
Je regarde de moins en moins ce qui se passe sur les calculatrices graphiques monochromes, surtout niveau jeux/graphismes.
Pas tellement parce que ça ne m'intéresse pas, mais parce que les rares fois que j'en parle, les statistiques de lectures et téléchargements prouvent que ça intéresse de moins en moins de monde. Après c'est peut-être moi qui ne sais pas intéresser les gens. Mais je pense que la calculatrice graphique monochrome n'a plus rien de magique aux yeux de nos jeunes qui ont des smartphones/tablettes à écran couleur à côté.
Il n'empêche que l'affichage de Windmill est très bien, et qu'ayant déjà codé des moteurs 3D dont un sur calculatrice, je devine la formidable quantité de travail qu'il y a derrière pour atteindre un tel rendu.
Bravo au développeur ainsi qu'au rédacteur !
Citer : Posté le 22/05/2018 12:15 | #
Wow, bien joué !
Le z-buffer, il est sur combien de bits ? De mémoire ça rentre tout juste dans la calto sur 8 bits
Citer : Posté le 22/05/2018 19:50 | #
Presque deux ans de travail pour en arriver là Critor, merci
Le z-buffer est un tableau de short de 128x64. Soit une taille de 16384 octets, c'est conséquent c'est vrai... Je vais essayer sur des char pour voir, mais à mon avis je vais trop perdre en precision et des objets risquent de s'afficher l'un sur l'autre sans cohérence.
128x64 est la fenêtre par defaut, on peut choisir la fenêtre dans laquelle afficher le rendu aussi
Citer : Posté le 23/05/2018 19:21 | #
Donc potentiellement on peut faire un jeu qui utilise que disons, 40×40 px dans un coin pour afficher un vaisseau spatial en 3D ?
Citer : Posté le 23/05/2018 20:19 | #
Dark Storm ou l'homme au idées farfelues
sinon d'après ce que j'ai compris cela devrait être possible
ne t'inquiete pas j'ai aussi des idée de jeu 3D
Citer : Posté le 23/05/2018 23:31 | #
Wow Windmill qui repart de plus belle !
Franchement les moteurs 3D m'ont toujours vendu du rêve. Je m'y étais vaguement intéressé à une époque et l'investissement nécessaire m'avait découragé, ce qui me fait mesurer le travail colossal qui se cache derrière ces derniers screens (et les vidéos Youtube fort sympathiques auxquelles nous avions eu le droit pour les premières étapes).
Je trouve ça vraiment beau de poursuivre un tel projet sur calculatrice, je suis vraiment admiratif 9* ! Au delà de la prouesse technique et du développement de tes compétences personnelles, j'espère que quelqu'un a déjà une idée concrète d'exploitation. Toi peut-être ?
Est-ce que ce genre de travaux serait compatible avec la graph 90 (pardon si la question est idiote, je suis noob sur ce sujet) ?
Merci du partage en tout cas, et merci Lephé' pour l'article !
Ajouté le 23/05/2018 à 23:33 :
Merci Hackcell pour le portage du Malical, c'est vrai que Windmill te vole un peu la vedette !
Comme je ne connais pas du tout ce langage : sais-tu si tu contenu déjà existant est adaptable pour nos calculatrices ?
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Citer : Posté le 24/05/2018 00:05 | #
Cela faisait un petit moment que je ne m'étais pas rendu sur ce forum, et je suis content de voir que la revue des projets continue son bonhomme de chemin ! C'est super !
9*, je t'encourage dans ce que tu fais. Je me souviens encore de tes premiers posts pour ce projet, et c'est fou que tu t'y tiennes encore et fasses évoluer la chose. Ton travail fin mérite vraiment d'être montré et mis en valeur.
e regarde de moins en moins ce qui se passe sur les calculatrices graphiques monochromes, surtout niveau jeux/graphismes.
Pas tellement parce que ça ne m'intéresse pas, mais parce que les rares fois que j'en parle, les statistiques de lectures et téléchargements prouvent que ça intéresse de moins en moins de monde. Après c'est peut-être moi qui ne sais pas intéresser les gens. Mais je pense que la calculatrice graphique monochrome n'a plus rien de magique aux yeux de nos jeunes qui ont des smartphones/tablettes à écran couleur à côté.
Pour réagir au commentaire de Critor ; oui, c'est vrai, ces calculatrices peuvent paraître assez vieillottes de nos jours. Il est évident qu'elles sont moins populaires que d'autres modèles proposant autant de couleurs qu'une GBA. Seulement, ces calculatrices monochromes, de par leurs limites évidentes (d'affichage, de puissance, de mémoire...), deviennent des objets extrêmement intéressants à s'emparer. Les contraintes, c'est aussi ce qui permet d'accéder à des chemins auxquels on n'aurait jamais pensé autrement. En s'attaquant à des projets ambitieux comme celui de 9*, on est amené à décortiquer, analyser, trouver des solutions en prenant en compte ces limites, et c'est justement ce qui - à mes yeux - est palpitant ! Et si cela intéresse moins de monde, les personnes qui s'y intéressent encore ne sont-elles pas les plus passionnées, celles pour qui ça vaut vraiment la peine de partager ces choses ? Coder sur sa calculatrice comme un fou, c'est super, ça forge et ça construit des bases véritablement solides !
Bref. Continuez, les mecs !
Citer : Posté le 24/05/2018 08:27 | #
Ayant une graph monochrome la Malical tombe à piont : je m'y met de suite !!
Citer : Posté le 24/05/2018 12:19 | #
Bravo Ninestars pour la reprise de ce projet ! J'ai été triste quand j'ai cru que tu l'arrêtais pour de bon.
Est-ce que tu as écrit de la doc sur le fonctionnement interne du moteur et les optimisations que tu as mises en œuvre ? Ça m'intéresserait beaucoup.
Citer : Posté le 24/05/2018 13:59 | #
Hey, c'est cool que le moteur 3D avance, ça commence à rendre vraiment bien !
Tu as fait des tests poussés pour déterminer le maximum que tu pourrais faire ?
Le malical reste une bonne opportunité pour apprendre facilement un langage plus rapide que le Basic et sans doute plus simple que le C.
Citer : Posté le 24/05/2018 18:32 | #
@Ne0tux, c'est vrai que les screenshots de windmill vende plus de rêve que ceux que je pourrait sortir du Malical (quoique...), de plus le Malical s'adresse plus au nouveau venu et donc ceux qui ont moins tendance à poster pour donner leur avis, donc c'est inévitable. Pour le contenu existant, tout les programmes existant sont fournis avec les sources, donc n'hésite pas à jeter un coup d'oeil (à défaut d'un endroit pour les poster ils risquent d'y rester longtemps, mais bon, quand on voit la tête des onglets pour le lua et le mlc, c'est compréhensible)
Citer : Posté le 24/05/2018 18:50 | #
Intègre Windmill à Malical !
Citer : Posté le 24/05/2018 23:00 | #
Ouhla je m'attendais pas à autant de commentaires, j'ai switché du téléphone à l'ordi quand j'ai vu la barre de defilement descendre aussi doucement haha !
Je vais répondre à chaque questions :
Donc potentiellement on peut faire un jeu qui utilise que disons, 40×40 px dans un coin pour afficher un vaisseau spatial en 3D ?
Dark Storm ou l'homme au idées farfelues
Ou alors un UHD qui empiète 5 pixels en bas de l'écran. C'est toujours 5*128 pixel en moins à traiter !
j'espère que quelqu'un a déjà une idée concrète d'exploitation. Toi peut-être ?
Les contraintes, c'est aussi ce qui permet d'accéder à des chemins auxquels on n'aurait jamais pensé autrement.
J'ai été triste quand j'ai cru que tu l'arrêtais pour de bon.
Tu as fait des tests poussés pour déterminer le maximum que tu pourrais faire ?
Il y a plusieurs facteurs qui jourent sur la vitesse, avec approximativement la proportion d'impact sur la vitesse :
- 25% : Le nombre de triangles. C'est différent du nombre d'objet, 2 objets de 10 triangles chacuns "consomment" autant que 1 objet de 20 triangles
- 60 % Le nombre de pixels "actifs" à l'écran. Ça correspond au nombre de pixels de l'écran qui vont appartenir à un triangle. Par exemple un objet vu de près occupe plus de pixels qu'un objet éloigné (à taille physique égale)
- 10 % l'ordre d'affichage des triangles. Si un angle de vue fait que je dessine mes triangles du plus eloigné au plus proche, je vais constamment réécrire à l'écran la couleur de mon pixel car je vais à chaque itération trouvé un pixel plus "proche" de l'écran.
- 5 % la couleur des textures. Un pixel blanc n'a pas besoin d'être dessiné puisque l'écran est déjà blanc, sauf si le pixel était noir avant. Et ça reboucle avec l'ordre d'affichage.
Enfin, j'ai peu de doute quand à tenir les 15 fps pour une map assez complète.
Citer : Posté le 25/05/2018 09:47 | #
Les 15 fps, je suppose que c'est sans overclock ? Donc ça signifierai qu'il est possible d'atteindre les 20-25 fps en poussant à fond les perfs ?
Citer : Posté le 25/05/2018 21:02 | #
Intègre Windmill à Malical !
Pourquoi pas, si j'arrive à intégrer un mini moteur 3D cela pourrait rendre le Malical
bloatedplus attractif.Mais d'abord, il faut que je corrige le portage (j'ai laissé passer des trucs par négligence et manque de test) et avant de modifier le Malical, je me posais la question de créer un émulateur pour les PCs.