Jeux Libres
       
           

» Les Forums » Aide à propos de la création de jeux vidéo » [Java] Sélection à base de raytracing!


Aller à la page : 1.

[Java] Sélection à base de raytracing!
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 11 Nov 2009, 20:37             Message non corrigé

Voilà j'ai enfin réussi à mettre au point l'intersection précise entre un rayon et un triangle, ce n'est pas si compliqué en utilisant les vecteurs.
Il faut faire attention aussi au produit scalaire qui se calcule comme ceci :

public float produitScalaire (Vec3t vect) {
Vec3t v = new Vec3t (vec3t[0] + vect.vec3t[0], vec3t[1] + vect.vec3t[1], vec3t[2]+ vect.vec3t[2]);
return (float) (0.5 * (v.longueur() * v.longueur() - longueur() * longueur() - vect.longueur() * vect.longueur()));
}


Et je met le code pour la recherche de l'intersection avec un triangle, je pense que ça pourra aider énormément David et pas que lui d'ailleurs.
En fait il suffit de englober les objets de boîte englobantes, pour les gros objets faire une hiérarchie de boîtes englobante, et puis faire un test plus précis sur les triangles dans la boîtes englobante.


o = rayon.getOrig().soustraire(p.getPointA());

point.getVec3t()[0] = -normal1.produitScalaire(o) / normal1.produitScalaire(d);
point.getVec3t()[1] = -o.crossProduct(ab).produitScalaire(d) / normal1.produitScalaire(d);
point.getVec3t()[2] = -ac.crossProduct(o).produitScalaire(d) / normal1.produitScalaire(d);

if (0 <= point.getVec3t()[0]
                         && 0 <= point.getVec3t()[1] && point.getVec3t()[1] < 1
                         &&  0 <= point.getVec3t()[2] && point.getVec3t()[2] < 1
                         && point.getVec3t()[1] + point.getVec3t()[2] <= 1) {

zPos = point.getVec3t()[0];
intersection.getVec3t()[0] = p.getPointA().getVec3t()[0] + ab.getVec3t()[0] * point.getVec3t()[2] + ac.getVec3t()[0] * point.getVec3t()[1];
intersection.getVec3t()[1] = p.getPointA().getVec3t()[1] + ab.getVec3t()[1] * point.getVec3t()[2] + ac.getVec3t()[1] * point.getVec3t()[1];
intersection.getVec3t()[2] = p.getPointA().getVec3t()[2] + ab.getVec3t()[2] * point.getVec3t()[2] + ac.getVec3t()[2] * point.getVec3t()[1];
return true;
}

d est la direction du rayon, ab et ac les vecteurs des deux côtés du triangle et normal1 le vecteur normal au triangle, et en voyant les formules on trouve le point d'intersection par rapport au triangle et on peut alors trouver l'intersection sur la map.

La formule est sur wikipédia il suffit de taper raytracing, franchement j'ai cherché pendant des semaines hors que c'est tout bête.
Bon il y a encore deux bugs à régler, le fait que l'objet sélectionné n'est pas toujours celui le plus proche de la caméra, un problème avec le z donc, et aussi un autre problème, lorsque je modifie un cube il ne s'affiche pas bien dans certains cas.
Voilà c'est les deux seuls bug restant, après j'attaque la sélection multiple parce que modifier les formes une par une c'est pas pratiques.
Il y a aussi le placement d'objets 3D fait avec blender que je dois encore faire, la suppression d'objets, la sauvegarde de la map et le placement des lumières et j'ai finis.
Pour les deux derniers points ça ira vite, le plus dur étant que les textures ne se déforment pas, et que les sommets se modifient correctement, sinon franchement faire un éditeur c'est pas si compliqué que ça en à l'air.

Purée je suis content mon algorithme de raytracing marche enfin, je vais pouvoir m'amuser une fois que tout les bugs seront corrigé!
Dans quelques mois l'éditeur sera fait je pense, encore faut t'il que j'ai envie de le continuer parce que là j'ai la flemme de le continuer je me dis toujours il est pourrit je galère, hors que en travaillant un peu j'arrive à corriger ces foutus bugs.

Pour le déplacement des sommets et des faces finallement je vais le faire avec la roulette de la souris se sera mieux parce que là, ça lag pas mal.
Mon système d'octree n'est pas optimal non plus, mais bon ça je le corrigerai après parce que là j'ai du mal déjà à m'en sortir.
Je vais poster le code aussi pour le rendre opensource.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 15 Nov 2009, 10:30             Message non corrigé

Voilà j'ai finis j'ai réussi à trouvé le problème avec le z et c'était tout bête, là j'essaye de faire des formes pour que mon éditeur de ne content pas que de modifier le sol, et j'essaye aussi de placer des modèle md2 sur les pentes, avec l'algo de raytracing c'est facile, il suffit de calculer la dimension du modèles, et le placé en fonction.

Enfin niveau édition le plus gros est fait, mais il me reste encore beaucoup à faire niveau texturing, lightning, shading et autre effets.
Et bien sûr la save.
L'eau ça ne sera pas pour tout de suite car c'est plus compliqué surtout quand il faut faire des vagues, ce sera pour la v2 de mon éditeur, parce que il va y avoir plusieurs versions.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
 


Aller à la page : 1.


Hébergeur du site : David
Version PHP : 5.4.45-0+deb7u2
Uptime : 55 jours 18 heures 9 minutes
Espace libre : 1512 Mo
Dernière sauvegarde : inconnue
Taille de la sauvegarde : 1113 Mo


5888799 pages ont été consultées sur le site !
Dont 2697 pages pendant les 24 dernières heures.

Page générée en 0.432 secondes


Nos sites préférés
- Création d'un jeu de plateforme de A à Z avec SDL
- Zelda ROTH : Jeux amateurs sur le thème de Zelda
- Zeste de Savoir : la connaissance pour tous et sans pépins
- YunoHost : s'héberger soi-même en toute simplicité
- Site de Fvirtman : recueil de projets et de codes en C et C++
- Par ici la sortie : le site des idées de sorties


  © 2005-2020 linor.fr - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.