Jeux Libres

Envie de créer un jeu vidéo ?   Le site qui vous accompagne de A à Z.


» Les Forums » Création de jeux en Java » Sélection à base de raytracing!


Aller à la page : 1.

Sélection à base de raytracing!
Lo



Grade : Expert
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 Mail
Lo



Grade : Expert
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 Mail
 


Aller à la page : 1.


Hébergeur du site : 1and1.fr



Site de création de Jeux Vidéo
Apprenez à créer vos propres Jeux Video

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

Page générée en 0.299 secondes


Nos partenaires
- Otium Production : Aide aux débutants à créer leurs jeux
- Les bibliothèques de développement de jeux vidéo


  © 2005-2012 www.jeux-libres.com - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.