Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » 1v1 3D >> FxEngine (Moteur 3D)
MilangHors ligneMembrePoints: 393 Défis: 2 Message

1v1 3D >> FxEngine (Moteur 3D)

Posté le 10/04/2019 20:45

Image destinée a être dans le futur un écran d'accueil

Bonjour à tous !
Ce topic regroupe l'ensemble des évolutions du projet de jeu 1v1 3D.


Brève présentation du jeu :
1v1 3D est un projet de jeu de tir à la première personne (fps) en multijoueur sur graph 75/85/95 en utilisant le cable 3pin...
Vous êtes en l'an 2119, et l'homme vit maintenant sous terre. La guerre fait rage entre les différents clans qui essayent de s'accaparer la terre entière... Vous spawnez dans un tunnel désaffecté et vous avez pour mission d'éliminer tout intrus. Cependant, la répartition des territoires et loin d'être claire, et votre adversaire vous traquera, jusqu'à ce que l'un d'entre vous tue l'autre...
Avant de commencer la partie il vous faudra choisir l'une des 3 armes disponibles :
Le pistolet simple (fréquence de tir moyenne, dégâts moyens, et croix pour viser)
Le fusil d'assaut (fréquence élevée, faibles dégâts par balle, et croix pour viser)
Le pistolet laser (rechargement long, mais dégâts puissants, pas de croix et présence d'un viseur avec zoom et masque)


Avancement du projet :

Ce moteur 3d, du nom de FxEngine, est en cours de développement. Je suis actuellement en train de le réécrire sous GNU linux. Cela prend du temps car j'essaie de le rendre réutilisable dans d'autres jeux.

Progrès publiés :

1: version du CASIO fx9860 SDK
Un premier jet très moyen en de performances
Alpha 1
J'ai un peu travaillé sur le sujet, notamment sur comment déformer les textures et j'arrive mainenant à des resultats comme ça :


Donc le rendu est ok, la taille de l'image rendue est de 124x85 mais toutes les variables sont des double et donc le rendu est très lent, à en juger par le le nombre de FPS affiché en bas (bon, on calc c'est un chouia plus rapide, parce que ici je fais tourner le logiciel avec wine mais 6-7 FPS pour une pyramide pas super proche, ça ne fait pas rêver).
Il faudra donc que je transforme le système de codage des coordonnées en int et optimiser la fonction de rendu des textures.
Je compte réécrire tout de zéro afin de pouvoir ajouter le clipping et la suppression des faces cachées.
Vous pouvez d'ailleurs noter la présence en bas d'une partie du futur affichage ingame !

Au point où j'en suis, j'utilise les libs suivantes :
MonochromeLib de pierrotll
LibText de lephenixnoir



2: Version 2
Alors que la version précédente a été réalisée avec le SDK de CASIO, j'ai décidé de poursuivre le projet avec les outils libres :
-> GNU Linux (bah oui j'ai dit outil libre)
-> le cross compilateur GCC pour les architectures sh3eb-elf (le programme est quand même compatible SH4-A, donc avec les calculatrices les plus récentes)
-> le fxsdk et gint, deux outils puissants faits par Lephenixnoir
Bien évidemment, cela n'empêche pas le programme d'être mis sur la calculatrice depuis windows, la manipulatiuon se fait comme avec un add-in normal.

Bon c'est pas tout, mais revenons à la bete
Si vous avez regardé la version précédente vous allez certainement être surpris !
J'ai réécrit mon programme de zéro, et appliqué les optimisations suivantes :
Optimisation 1 : J'ai réécrit mon programme, en utilisant à 99,99% des entiers.
Optimisation 2 : J'ai ajouté la notion de coté visible d'une face.
Optimisation 3 : J'ai changé la méthode de conversion des coordonnées, j'utilise maintenant les matrices de rotation.
Optimisation 4 : Un grosse optimisation au niveau de l'affichage des triangles, notamment une suppression du cas par cas pour une boucle plus légère.

Ces quatre optimisations, associées à l'utilisation du puissant compilateur gcc, et de gint (par Lephenixnoir) qui remplace les syscalls peu optimisés de CASIO, permettent d'obtenir le rendu de triangle, à charge égale, d'une vitesse environ 10 fois supérieure (oui, 10 fois, vous ne rêvez pas !). De plus, j'ai complété la fonction de déformation des textures, appliquant maintenant la perspective de façon plus affinée sur celles-ci.

Cependant, la technique de déformation n'est pas encore complètement au point et donc certaines vues sont un petit peu erronées, c'est notamment ce que j'essaierai de corriger pour la prochaine version.




Vous pouvez allez voir l'avancement sur le dépot gitea du projet.
Le moteur FxEngine est également accessible, mais reste pour l'instant incomplet. A partir du moment où elles auront atteint un minimum de stabilité je publierai en tant que programme. N'hésitez pas à dire ce que vous en pensez !


Fichier joint


Pages : 1, 2, 3, 4Suivante
NinestarsHors ligneMembrePoints: 2254 Défis: 22 Message

Citer : Posté le 11/04/2019 23:25 | #


Et bien, je suis intéressé de voir comment tu vas réaliser un moteur 3D.
Qu'est-ce qui te plait le plus ? Créer le moteur graphique 3D ou le jeu ?
KikoodxEn ligneMembrePoints: 1615 Défis: 9 Message

Citer : Posté le 12/04/2019 07:52 | #


Milang a écrit :
Donc pas de raycasting, mais un vrai moteur bien chiant.

Que comptes-tu faire alors ?
Un moteur de raycasting est déjà compliqué à coder, et pour ce que tu veux faire ce sera très efficace (gérer trois axes sur une croix directionnelle est abominable).
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 12/04/2019 12:06 | # | Fichier joint


Pour le moteur 3D, je découpe chaque cube en 12 triangles de couleur noire ou blanche
Je fais le calcul des coordonnées projetées pour les 3 sommets et je remplis le triangle en même temps que le buffer pour la profondeur...
Pour l'instant le problème est la gestion des coordonnées projetées lorsque le point est derrière et cela ce voit lors du dessin des triangles
Ninestars a écrit :
Qu'est-ce qui te plait le plus ? Créer le moteur graphique 3D ou le jeu ?

En fait quand ça marche le degré de fierté est énorme , mais il y a des jours ou je casse tout ce que j'ai fait !
Sinon je trouve globalement le codage du moteur très intéressant : J'y ai appris plus (niveau math) en codant que pendant les cours depuis que j'ai commencé

Ajouté le 12/04/2019 à 12:55 :
Kikoodx a écrit :
Milang a écrit :
Donc pas de raycasting, mais un vrai moteur bien chiant.

Que comptes-tu faire alors ?
Un moteur de raycasting est déjà compliqué à coder, et pour ce que tu veux faire ce sera très efficace (gérer trois axes sur une croix directionnelle est abominable).

D'après ce que j'ai compris :
Wkipédia a écrit :
Autre limitation courante de la technique du raycasting : le champ de vision est parallèle au sol, il n'est pas possible d'avoir un axe de la caméra entièrement libre.

Or j'en ai absolument besoin pour la gestion du viseur. C'est pour cela que j'en ai commencé une puis abandonné pour passer en "3D pure"
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 12/04/2019 19:23 | # | Fichier joint


12/04/19 ajout image presentation
NinestarsHors ligneMembrePoints: 2254 Défis: 22 Message

Citer : Posté le 12/04/2019 19:52 | #


Hmmm elle fait quoi comme dimension l'image ?
Très sympa cette image.
C'est bien de vouloir faire toi même un "vrai" moteur 3D ! Mais attention ! Pour en arriver à ce niveau là avec Windmill c'est 3 ans de boulot
Si ça t'intéresse, je peux t'expliquer comment utiliser Windmill pour ton application. J'ai presque fini la doc
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 12/04/2019 20:22 | # | Fichier joint


Merci


Le zbuffer fait 85*64, mais pas sur l'image de présentation, qui n'est qu'un petit dessin
Et sinon pour windmill ça m'intéresse ! Après je n'ai pas besoin de toutes les fonctions, juste afficher des cubes + 1 adversaire

DisperseurHors ligneMembrePoints: 1707 Défis: 1 Message

Citer : Posté le 12/04/2019 20:32 | #


@Ninestars: Quand tu aura terminé la doc je pense quevca intéressera tt le monde. Donc la poster serait super mais je pense que c'est prévu..?
Mes meilleurs jeux
N'hésitez pas, notez !

Jeux BasicCasio / CBasicCasio:
-World Tank War II
-Apollo 11
-GeoGraph ! Élu Jeu du Mois de Mars 2019 !
Jeux C:
-Planétarium 2 ! Chef d'Oeuvre !


√(2+2-2+2-2+2+2-2-2-2) = 0
LephenixnoirEn ligneAdministrateurPoints: 16483 Défis: 140 Message

Citer : Posté le 12/04/2019 20:35 | #


Wow, c'est joli ça ! Ça donne envie d'y jouer :o
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 12/04/2019 20:37 | #


Mais ce n'est qu'un dessin. Pour l'instant sur mon G1A j'ai 8 petits points (sommets d'un cube) que je déplace...
On en est trèèèèèèèèèèèèèèèèèèèèès loin !
KikoodxEn ligneMembrePoints: 1615 Défis: 9 Message

Citer : Posté le 13/04/2019 10:49 | #


Alors arrête de vendre du rêve et montre plutôt tes progrès réels
(Ou ajoute au moins l'indication que ce n'est pas une image tirée du jeu)
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 02/07/2019 18:46 | # | Fichier joint


Ajout captures d'écran du moteur 3D
LephenixnoirEn ligneAdministrateurPoints: 16483 Défis: 140 Message

Citer : Posté le 02/07/2019 19:19 | #


Oh un autre moteur 3D, bon courage !

9* a passé pas mal de temps à grinder toutes les optimisations possibles, mais c'est peut-être quelque chose auquel il faut penser plus tard !
RaderHors ligneMembrePoints: 195 Défis: 0 Message

Citer : Posté le 02/07/2019 19:26 | #


Enfin des images du moteur!
J'ai hâte de voir comment ça va rendre!
MactulHors ligneMembrePoints: 667 Défis: 0 Message

Citer : Posté le 03/07/2019 10:11 | #


oui, moi aussi, la 3D c'est vraiment cool !!
Mes programmes
Cliquer pour enrouler

Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ

Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 03/07/2019 12:08 | #


Le seul "problème" c'est que quand je l'ai commencé je ne connaissais rien à la surcharge d'opérateurs, (décalages de bits notamment) et je ne savais pas utiliser les divisions de int.
Là maintenant j'ai un peu progressé, j'espère pouvoir pondre une moteur digne de ce nom !

Ajouté le 17/07/2019 à 19:01 :
Est-ce que vous savez si le c++ est plus ou moins performant que le c, compilé avec le compilo de renesas ?
LephenixnoirEn ligneAdministrateurPoints: 16483 Défis: 140 Message

Citer : Posté le 17/07/2019 19:05 | #


C'est kiff-kiff surtout étant donné que le compilo de Renesas ne sait pas vraiment faire du C++ à part classes et méthodes. Ne compte ni sur string, ni sur vector, ni sur la STL ou les templates un peu compliqués, car il ne les a pas.
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 17/07/2019 19:07 | # | Fichier joint


Bah de toute facon la j'ai commence avec gcc. Tiens d'ailleurs, il y a les vector dans une lib quelconque ou pas ?
LephenixnoirEn ligneAdministrateurPoints: 16483 Défis: 140 Message

Citer : Posté le 17/07/2019 19:13 | #


Il te faut une STL pour les vector ; sur Planète Casio il n'y aucune STL qui soit utilisée de façon récurrente et bien établie (avec un tutoriel etc). Si tu en veux une il faut que tu te la compiles.
MilangHors ligneMembrePoints: 393 Défis: 2 Message

Citer : Posté le 17/07/2019 19:52 | # | Fichier joint


Aaargh...
Faire ça en plus du moteur non merci pour l'instant. Mais je vais juste essayer d'implémenter un système de tableaux dynamiques a taille variable avec new

LephenixnoirEn ligneAdministrateurPoints: 16483 Défis: 140 Message

Citer : Posté le 17/07/2019 20:02 | #


Dans ce cas realloc() te sera sans doute utile

N'hésite pas à doubler la taille du tableau à chaque fois pour maintenir des perfs raisonnables !
Pages : 1, 2, 3, 4Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 62 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd