Ebauche de moteur 3d

Soyez le premier à donner votre avis sur cette source.

Vue 5 380 fois - Téléchargée 491 fois

Description

bon ben c'est mon dernier code en java! cette source bien ke relativement avancée, n'est malheureusement pas terminée... Au cours d'un contrôle de routine lors de l'élaboration des ombres, je me suis rendu compte ke java ne supporte le récursif ke dans une certaine mesure car si une fonction tourne trop longtemps sur elle même, un doux message répondant à StackOverflowError apparaît. Problême de mémoire me diriez-vous... Et bien non:

faites-tourner la fonction

void tourneEtFaisPasChier(int i)
{
if(i < 100000)
tourneEtFaisPasChier(i+1);
}

et vous verrez votre stackOverflowError vous raconter sa vie alors ke ce n'est à proprement parler pas un pb de mémoire puiske chake itération demande la crétation d'un entier, c'est à dire au grand max 100Ko! (et encore le test i < 100.000 peut être remplacé par i < 15.000 dans une applet pour ke ca bug aussi!)

Bon enfin bref, j'arrête net mon prog là ou il en est et je change fissa de langage (sans doute visual C++, en espérant ke ce langage, ke nous pouvons considérez comme étant le plus sérieux de tous, permette de faire du récursif!!!)

Donc vous avez sous vos petites mirettes un bon début de moteur 3D permettant une utilisation simple d'objet 3D simple voire complexe mais, comme il n'est pas terminé, je m'adresse plutôt à ceux ki veulent avoir un apercu du fonctionnement ke peut avoir un moteur 3D. Mais je vais faire des mécontents: les commentaires sont inexistants et je ne les rajouterais ke kant tout sera terminé

Pour ceux ki veulent se servir des kelkes fonctionnailtés (il permet kand même d'avoir un apercu rapides de vos surfaces) il permet de représenter des surfaces mathématikes, maillées automatikement (mais là aussi, je n'ai pas fait les tests de finission, donc gare aux bugs!) et des maillages ke vous faites vous même.
Le prog ne permet bien entendu pas l'affichage de z²=x²+y² (il ne résout pas les ék mathématikes) mais affiche sa résolution comme z = sqrt(x²+y²) et z = -sqrt(x²+y²). A vous de programmer la résol, le prog se charge de l'affichage.
bon, le plus simple, c'est de voir l'exemple (dans compilation!, en clikant sur index) et de regarder la source fonction.java
il y a des raccourci clavier:
distance caméra + -
zoom pg+ pg-
filaire f
lissage/facettes l
tourner caméra flêches
tassement t
gonflement g

ainsi ke le drainage de la rotation avec la souris (bouton souris enfoncé)

Bon, il y a possibilité de faire des animations (évolutions temporelles d'ékouations mathématikes par ex) mais c'est la partie où j'ai fait le moins de tests... alors bon... il vaudrait mieux ke vous cherchiez autre chose ou ke vous ... attendiez ke je finisse le prog. Mais bon, c'est pas avant un bout de temps car il devrait y avoir, en plus des commentaires, de nombreuses fonctionnalités: maillage automatike, coupes, transparence, animations, surfaces prédéfinies

Source / Exemple :


un exemple: il suffit de taper la résolution de z² = x² + y² pour avoir une jolie sphère toute colorée!

void fonction1(double x,double y)
  {
    double z,r;
    Color couleur = new Color((int)((x+1)*200/2)+50,(int)((y+1)*200/2)+50,(int)((x+1)*(y+1)/2/2*200+50));
    r=x*x+y*y;
   if(r<=1)
    {
        espace3D.ajouterPoint(Math.sqrt(1-r), couleur);
      if(x>=0.5)
        espace3D.ajouterPoint(-Math.sqrt(1-r), couleur);
      else
        espace3D.neRienAjouterPourCePoint();
    }
      else
        espace3D.neRienAjouterPourCePoint();
  }

Conclusion :


je vais encore avoir un 3/10

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
1 juin 2006

>>je ne suis pas informaticien
clair c est un des pire codes que j ai jamais vu :)
Messages postés
36
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
2 février 2010
1
okey, de toute facon j'ai rencontré le même problème en C++ (bien que ca tourne plus longtemps). Pour info, ce programme allait plus vite en java qu'en c++. Faut dire que je ne fait appelle à très peu d'instructions natives (ce que je voulais, c'était appliquer ce que j'ai appris en math, je ne suis pas informaticien)

je le reprendrai plus tard

merci
Messages postés
2
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
1 juin 2006

alors 1er point :
dabord java c est pas lent arretez de poursuivre inlassablement ce mythe dépassé. On est plus en 1998 regarder sur net les benchs dans tout les domaines vous serez bcp plus que supris par les resultats.
et second point :

NE LACHE SURTOUT PAS TON MOTEUR !
le probleme que tu decrit n est pas inéluctable et tu peux aisement le dépasser.
La taille de la stacksize ( piles des appels peut etre modifiée )
c:/>java -Xss [taille stack size][k/m] MonProg
ex :
c:/>java -Xss1024k MonProg
Une recherche sur les mots "tuning jvm stack size " devrait vous fournir
les infos qu il vous manque.
Y a toujours unne solution ... sauf des fois !
Messages postés
5
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
10 avril 2007

C clair, utilise OpenGL. ça ne peut pas être lent.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
Attention, stackoverflow ca signifi pas un probleme de memoire, ca ve dire que ta pile deborde a force d'empiler les parametres de ta fonction appelé recursivement

par contre c'est vrai que ca devarit etre plus rapide en c++, java est ce qu'il y a de plus lent

en tout cas ca reste du bon boulot, des maths pur et dur ;), mais si tu pase en c ou c++ (pour garder une structure oo de ton prog) et avec une api comme opengl, tu vera ca sera autre chose
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.