Remplissage de triangle en 3D

Le problème exposé dans ce sujet a été résolu.

Sachant que ton format n'est pas fait en pur voxel, il te faudra passer par une équation géométrique d'un triangle 2D mais dans un espace 3D :D qui permet de trouver ces points fictifs je pense.

Aufait j'ai vu que tu utilisais la GDI et donc tu ne fais pas d'appel de fonctions directx/opengl ? Si c'est ça, tu as combien de fps ? (moi aussi j'utilise la gdi (99% cpu 1% gpu (affichage de l'image) :D )

+1 -1

Je n'ai absolument pas le niveau pour t'aider réellement, mais je vais essayer d'apporter un peu d'aide.

Premièrement, il faut que tu arrêtes de parler de points. Mathématiquement, des points il y en a une infinité. En informatique, un point ça veut rien dire. Ici, tu parles de pixels.

Ensuite, comment est-ce que tu définis le nombre de pixels de tes faces ? C'est géré par la librairie ou c'est fait manuellement ? (Je reprécise que je ne m'y connais pas, j'essaye juste de récupérer les infos qui pourront servir aux autres Zesteux)

+1 -0

Phigger,

Personnellement point, coordonnée, vertex, pixel, voxel et atome (pour la physique), c'est la même chose pour moi : D

+0 -0

ah oui, enfaite-je fais abstraction évidemment, car je n'ai pas trop idée de comment faire pour l'instant.

Donc atome = photon = couleur, comme dans les jeux actuels quoi, on est d'accord qu'il y a de la physique dans les jeux, donc atome.

C'est le même principe que les programmeurs de haut niveau, osef des registres, des instructions, de la linéarité de la RAM ^^

+0 -2

Il y a de fortes chances pour que ton problème en vienne à dessiner un triangle 2D (cependant, il te faudra peut-être gérer un z-index pour les superpositions). Ainsi, il existe une méthode plutôt simple: pour un triangle ABC, tu choisis le sommet A et les deux vecteurs $\vec{AB}$ et $\vec{AC}$.

Ensuite, il ne te reste plus qu'à parcourir tous les pixels, depuis les coordonnées de $A$, et avec deux coefficients $u$ et $v$. Tu définis tous les points $M$ de ton triangle par:

$$\forall u, v \in \mathbb R^{2+}, u + v \leq 1, \vec{AM} = u \times \vec{AB} + v \times \vec{AC}$$

Il faut cependant, dans ton implémentation, choisir le pas d'incrémentation pour tes valeurs $u$ et $v$, en prenant par exemple pour $u$ $max(|x(\vec{AB})|, |y(\vec{AB})|)$, de façon à n'avoir aucun trou, et une expression équivalent mais avec $\vec{AC}$ pour $v$.

Je le répète, c'est comme ça que je le vois, libre à chacun de voir ce qu'il veut, mais cela m'aide à faire mon moteur 3D.

Ça peut être bizarre pour vous, mais c'est comme ça x)

+0 -5

Bah je n'ai pas trop de problèmes pour l'instant, tout beigne, je verrais bien si cela va en poser plus tard.

Après rien n'empêche que mes définitions peuvent évoluer, on en apprend tous les jours, après tout ^^

Mais cette définition je la trouve assez cool, car qui peut honnêtement définir en termes mathématiques/informatiques de façon facile et complète un atome, des électrons, des quarks, …, une lumière, pas beaucoup, alors qu'en programmation graphique classique, on utilise juste une couleur RBG et une coordonnée, enfin moi oui.

Pour les autres techniques je ne peux pas dire car je n'exploite pas le pipeline du gpu (directx/opengl).

Pour la question des maillages en voxel, bah je vois pas trop l'utilité d'un maillage en voxel, car le maillage est déjà présent dans le fichier 3D (enfin si on zoom sur l'objet, il y a un chti problème) ^^

+0 -6

dur ^^

Tu utilises quel compilateur ? essaye avec ms compiler/intel compiler en x64 :)

(sous icl compiler, mon engine plafonne autour de 180 fps lors d'un mouvement d'objet, sous nasm, c'est 40, avec 1 millions de voxels (je soupçonne l'alignement mémoire qui fait la différence (vmovaps/..))

Je ne peux pas trop comparer car je ne gère pas les ombres ni lumière, que l'affichage de points avec leurs couleurs (40 fps pour 1 millions de points avec mon i7-2640M, si ça aurait été un xeon et avx2 support (mon cpu ne gère que l'avx), ça serait la fête des fps :D ).

Sinon ton projet m'intéresse, il est en open source (quel langage) ? :p

+0 -0

Shaynox, je veux pas paraître méprisant, surtout que la 3D j'y connais pas grand-chose, mais j'ai un peu l'impression que tu balances des termes techniques de manière décousue ce qui aide pas vraiment l'OP. De plus, ton histoire de compilateur c'est clairement pas le point bloquant, c'est le code qu'il faut optimiser. Et ça, comme Aze l'a dit, ça n'est pas la priorité.

@Aze: Est-ce que tu pourrais nous montrer le code qu'on voie comment tu procèdes ?

+6 -1

Oups j'avais pas vu les messages de la page 2 ;)

Je ne défini pas le nombre de pixel de chaque face en fait…
Je cherche a en trouver le nombre, ainsi que leurs positions.
La librairie ne gère rien. Je lui envoi juste la couleur d'un pixel et sa position (2D), et elle le colore à l'écran.

En fait la position Z m'est utile pour calculer l'ombrage, par pour le Z-buffer qui est géré face par face avant. Je n'ai pas du tout les compétence pour comprendre ta formule, mais par contre j'ai compris ton explication, hélas on ne peut pas récupérer la position Z de chaque points de cette manière :/ .

J'utilise le compilateur de Visual Studio, et de toutes façons je ne cherche pas les performances, c'est pour rendre une seule image, c'est pas pour du rendu en temps réel ;). Pour le moment ce n'est pas open source, mais ça le deviendra surement à l'avenir. Comme dit plus haut je programme en VB.net.

+0 -0

Le problème Aze, c'est que tu t'attaques à des maths de trop au niveau. Il te faudrait au moins un niveau de Terminale S pour t'attaquer à cela. Sinon, on devrait faire l'algorithme à ta place, et dans ce cas-là y a 2 soucis :

  • On a pas que ça à faire, non plus ^^
  • Et ça réduirait fortement l'impact didactique.

Une autre solution serait de t'expliquer toutes les notions de maths nécessaires, mais ça nécessite de t'enseigner vecteurs + gémotrie dans l'espace :/

+0 -0

Je sais, mais je pense qu'on peut y arriver avec des trucs assez simple ;). (Les vecteur je comprend à peut près ;) ) je viens d'avoir une idée, en faisant un algorithme de tracé de segment basique, mais avec un décalage Z ;) Je vous tiens au courant des résultats.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte