manu008 a écrit 5 commentaires

  • [^] # Re: Projet "économiseurs d'écran" en Java

    Posté par  . En réponse au message Rendu 3D. Évalué à 1.

    Le site des 2 projets : http://ibiiztera.be/3D/fr/projet3D.php

    Comme ça j'arrête de balancer 10 commentaires par jour!

  • [^] # Re: Qu'est-ce que c'est?

    Posté par  . En réponse au message Rendu 3D. Évalué à 1.

    Je pensais justement appliquer la technique que j'ai développée pour les triangles à des surfaces paramétrées (notamment des NURBS ou surfaces de Bézier) à l'avenir: sub-diviser l'intervalle de résolution des paramètres jusqu'à obtenir une définition de 1 pixel. Je pense que ça devrait bien fonctionner...

    Quand aux différents projets que tu cites, la plupart ne fonctionne pas sur ma machine Linux. Ce qui n'est pas un argument en soi, bien que ce soit genant pour les tests. Sous Windows, j'ai réussi il y a longtemps à faire tourner quelques applis.

    J'ai essayé récemment Cinema4D, qui a l'air bien fait. Il y a quelques le libre: Art of Illusion, qui est un travail réalisé par un amateur et est intéressant.

    Ce qui m'intéresse:
    - l'éditeur d'objets
    - le stockage des données, avec la possibilité d'importer plusieurs formats.
    - les effets spéciaux
    - l'animation vidéo

  • # Projet "économiseurs d'écran" en Java

    Posté par  . En réponse au message Rendu 3D. Évalué à 2.

    Tant que j'y suis je redonne l'url de mon autre projet:

    A la base les 2 projets étaient identiques. L'original est en Java.

    http://artofpixel.svn.sourceforge.net/viewvc/pixelart/Images/src/

    Bien que l'url soit toujours "pixelart" je l'ai rebaptisé en "pixeldemos", il a pour but de faire des animations graphiques vidéos. La dernière est une spirale psychédélique (à consommer sans modération).

    Le projet est en soi un peu trivial: une classe encapsule un contexte Graphics qui permet de dessiner sur les images...

    http://www.youtube.com/watch?v=r6z2A6zNbUo

    Voilou.

  • [^] # Re: Qu'est-ce que c'est?

    Posté par  . En réponse au message Rendu 3D. Évalué à 1.

    En terme de performances, mon logiciel n'est pas encore au point.

    L'algorithme que j'utilise pour itérer sur les faces de l'objet et les diviser est au point dans ce sens où on n'a pas à calculer des points qui se situeraient en dehors des objets à dessiner.

    Le backface culling permet de cacher les faces arrières, je peux l'implémenter dans mon programme en utilisant les normales des facettes. Une normale négative entrainerait l'élimination de la facette. Une normale positive son acceptation comme candidate pour le tracé.

    Quand au clipping, il permet de ne pas calculer les objets qu'on ne voit pas. Ce que ça m'inspire en terme d'algorithme est un précalcul de terrains : en fonction de la position x du véhicule, on peut déterminer quels objets sont définitivement hors champ (un arbre situé à 500 mètres par exemple) quels objets sont candidats pour la mise en champ. Et puis faire le calcul temps réel (dans cet exemple pour un jeu de voiture), afin de calculer l'écran courant. Je ne pense pas aux objets cachés derrière un autre, bien que le cas en question devrait être considéré.

    PS: je te trouve mignon sur la photo on pourrait se rencontrer pour amitié ou plus si affinité :) : ) : ) ) ah ha ha

  • [^] # Qu'est-ce que c'est?

    Posté par  . En réponse au message Rendu 3D. Évalué à 1.

    Qu'on ne me prenne pas pour un illuminé de première! (bien que je le sois un peu)

    La division de facette devraient plutôt s'appeler " la subdivision de facettes".
    J'explique.

    On a un algorithme de rendu qui prend en entrée :
    - les coordonnées des objets. La structure de données adoptée est simple et consiste en une liste de triangle. Un triangle est formé de 3 points avec leurs coordonnées x, y et z soit 9 nombres float (ou double) par triangle.

    Par exemple un cube est composé de 6 faces chacune est divisée en 2 pour obtenir deux triangles (ou facettes) par face de pet de cube.
    Un personnage 3d sera composé de plus de facettes.

    Pourquoi des triangles? La réponse est simple: un plan dans l'espace est déterminé par définition de 3 points. Soit 3 points quelconques, on obtient, dans le cas ordinaire, un plan. En juxtaposant des plans, on peut déterminer l'enveloppe d'un objet 3D, ce qu'on souhaite dessiner. Ce dessin sera ressemblant à l'objet.

    Ce n'est peut-être pas le meilleur procédé, ce n'est qu'une simplification pour la synthèse d'objet 3D.

    Exemple de triangle:
    FacettedObject *fo = new FacettedObject();
    fo->ajouterFacette(Point3D(0,0,0), Point3D(0,1,0), Point3D(1,1,0), Color(255,255,255));

    Ce qui ajoute une facette blanche à notre objet.
    - La deuxième entrée de l'algo: les projections 2D des 3 axes 3D x,y,z.

    A partir de ces 2 entrées l'algo produit une image, que l'on peut afficher à l'écran, imprimer, sauvegarder sur disque, encoder dans une animation vidéo.

    La subdivsion de facettes proprement dite est une bidouille que j'ai inventée (à moins qu'un "plagieur par anticipation" se désigne.

    Le problème qui y mène est le suivant: l'algo du zbuffer parcourt l'écran et pour chaque point P(x,y) et chaque facette f, calcule l'intersection entre la droite 3D passant par le point P(x,y) et la facette f. Il est important de préciser qu'il s'agit bien d'une droite au point P, car le point de l'écran en 2D est en fait la projection de la droite 3D dont tous les points se trouvent projetés au point P.

    -> Un des problèmes du zbuffer est de trouver les coordonnées de cette droite. CAR c'est les coordonnées z (profondeur) des différents points d'intersections avec les facettes qui vont permettre de trier les facettes afin d'afficher seulement les facettes qui sont devant les autres. (voir schéma sur internet du zbufffer)

    La subdivision de facettes contourne ce problème. Au lieu de calculer directement z par une formule, on itère, pour chaque facette, en divisant f jusqu'à obtenir des surfaces à l'écran <= 1 (= 1 pixel).
    La division se fait comme ceci:
    Diviser f
    Prendre M= (P1+P2+P3)/3 P12= (P1+P2)/2 P23= (P2+P3)/2 P31= (P3+P1)/2
    f sub 1 = P1 M P12; f sub 2 = P12 M P2 ; f sub 3 = P2 M P23 ; f sub 4= P23 M P3 ; f sub 5 = P3 M P31 ; f sub 6 = P31 M P1
    Diviser f sub (1, 6) si surface >1

    Le bénéfice est le suivant : on peut estimer que si surface(fn) est suffisamment petit (concrètement 1 pixel), on a que (fn:P1 fn:P2 + fn:P3)/3 sont les coordonnées de la facette que l'on va tracer au pixel P.

    L'algorithme n'est pas parfait au niveau du rendu, mais ça fonctionne bien. (voir illustration sur Youtube cube tournant autour d'un axe, et d'autres objets que je vais rendre bientôt)...