_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 23 nov. 2007 à 23:23
"C'est une perspective intéressante, non ?"
Oui, très !
Le traitement d'image me semble aussi intéressant, mais j'ai du temps, et je vais prendre mon temps...
pgl10
Messages postés380Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention29 octobre 202311 21 nov. 2007 à 10:48
Je complète ici mon message précédent avec les deux précisions suivantes :
1°) PhotModeler a besoin de deux photos en stéréo pour relever les 3 coordonnées d'un point. Cependant il existe des cas particuliers où on peut donner soit l'illusion du 3d avec une seule photo : http://www.youtube.com/watch?v=VuoljANz4EA soit même un vrai modèle 3d avec une seule photo : http://www.youtube.com/watch?v=nice6NYb_WA Mais cela sort du contexte actuel.
2°) Si on passe d'un nuage de points 3d à l'affichage d'un modèle d'objet définis par des points 3d je pense que l'on peut valablement parler d'un "modeleur d'objet 3d défini par points" et pas seulement d'un afficheur.
pgl10
Messages postés380Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention29 octobre 202311 21 nov. 2007 à 10:01
Donc, en remplaçant le réseau de points par la lecture d'un fichier de points puis par un traitement avant l'affichage on obtiendrait, sur la base de ce logiciel, non pas un "modélisateur de points 3d" mais un afficheur de modèles d'objets définis par des points 3d.
Quant à l'obtention des points 3d il y a de très nombreuses solutions : scanner 3d, etc. Et même le logiciel gratuit : PhotoModeler qui permet de partir d'une simple photographie.
C'est une perspective intéressante, non ?
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 20 nov. 2007 à 21:58
MESA, ... comme dans Half Life...
D'accord, je comprend mieux. Et je parie que c'est plus rapide de le faire en hardware que en soft (c'est pour ça qu'une bonne carte graphique coute le prix de 3 PC bas de gamme).
Dorénavant je vais appeler mon programme "modélisateur de points 3d", avant de m'attaquer aux surfaces (c'est bien ça qui vous manque, non?).
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 19 nov. 2007 à 01:03
michel :
je suis entièrement d'accord avec toi point de vue intérêt mathématique pur.
C'est très intéressant, j'y ai moi-même passé un certain temps.
Cependant, l'opposition qui ressort des commentaires vient de ta notion de "moteur 3D".
Un moteur 3D n'est pas "quelque chose" ( je suis volontairement flou ) qui t'affiche des polys à l'écran.
Un moteur 3D est un programme d'une complexité redoutable, qui pour simplifier à l'extrême, sélectionne les polygones que le "quelque chose" doit afficher, et qui lui dit comment le faire.
A propos du quelque chose :
Soit tu le fais en software. Tout en CPU. Ca s'appelle MESA sous Linux, ya d'autres solutions sous Win32 je crois.
Soit tu le fais en hardware. Avec ta carte graphique, que tu lui dis " affiche moi tel poly ", et il le fait à la hauteur de 3 millions de fois par secondes environ, pendant que toi tu fais autre chose.
Avis aux autres : un moteur 3D ne tient absolument pas compte d'une quelconque interaction. C'est le rôle du moteur physique, du gestionnaire d'évènements, de(des) l'AI(s), de la timeline et du scénario, etc. Et perso je trouve pas franchement que ça rentre dans le cadre de ce que l'on appelle communément un "moteur 3D".
voilà !
Et merci Brunews pour ton sens du fun :) j'aime :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 nov. 2007 à 21:32
Oui, ça s'appelle SSE.
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 18 nov. 2007 à 20:56
Ok, je comprend pourquoi on dit que LocalAlloc () est démodée.
xmm = registre 128 bits, ou je n'ai rien compris.
Si je veut agir sur des long (4 octets, 32 bits) et non sur des mots de 16 octets, il n'y pas grand chose à modifier :
utiliser mov au lieu de movadp
utiliser les registre du coprossesseur arithmétique au lieu des registres xmm (Donc utiliser les opérations du coprossesseur)
Pour ma culture générale, XMM est bien une technologie intel ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 nov. 2007 à 00:23
ATTENTION que je transfére par 128 bits en mode aligné!!! ce qui implique que les matrices doivent être correctement placées sur des adresses multiples de 16 sinon badaboum le prog. Suffit d'utiliser VirtualAlloc pour avoir un alignement correct.
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 17 nov. 2007 à 23:52
Merci beaucoup, c'est une amélioration conséquente (c'est sur qu'avec des boucles imbriquées et un calcul pour chaque membre de la matrice résultat ce n'est pas du tout optimisé).
Je laisse le même code ici, pour que ça reste compréhensible!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 nov. 2007 à 19:02
La question serait donc:
Que fait 'ret 4' ?
'ret' est l'instruction de remise dans EIP (pointeur d'instruction) de ce qui est en [esp] provoquant la suite du prog à l'adresse EIP, ce qui suit est le nbr d'octets à remonter ESP (pointeur de pile) après le POPage de EIP.
Cyberboy2054
Messages postés173Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention22 août 2008 14 nov. 2007 à 18:56
Il correspond à quoi le 4 que tu renvoie ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 nov. 2007 à 00:36
POUR LE FUN... on booste ta MatriceMultiplication_14_44().
Listing compilo en full optim et SSE2:
- 50 instructions dont 16 MUL et 36 accès mémoire.
Listing dessous:
- 36 instructions dont 8 MUL et 12 accès mémoire.
Tu auras au moins une fonction de moteur qui a de la reprise et du couple.
Bonne nuit à tous.
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 13 nov. 2007 à 21:29
"Sinon la gestion des ombres, des collisions, du son, de l'interaction bref tout ce qui fait un moteur... c'est où ?"
ombres : OK, c'est du visuel.
Mais le reste (son, interactions, collisions), c'est moteur son et moteur physique.
source : Wikipedia (à moins que j'ai mal lu)
Sinon, mon "bout de code" compile et marche indépendament! Ce n'est pas un 'orteil' de moteur 3d, c'est un 'squelette' (lol).
"Déjà tu n'as pas la notion de ce qu'est un "moteur" en informatique.[...]C'est même pas 1% de ce qui constitue un moteur 3d." Je suis pas en foncièrement en désaccord, mais j'essai d'apprendre et c'est déjà une base pour continuer.
En plus, vous avez déjà vu une source simple comme la mienne? Moi, non, c'est pour ça que j'ai posté. J'espère juste que ça va servir à quelqu'un.
Metanil : et toi, tu joue à quoi?
shenron666
Messages postés229Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention20 août 2014 13 nov. 2007 à 20:54
Michel, relis mon commentaire, je suis loin, très loin de parler de moteur physique. Déjà tu n'as pas la notion de ce qu'est un "moteur" en informatique. Ton bout de code est juste un exemple de "calcul de matrices dans un espace homogène en 3 dimensions". C'est même pas 1% de ce qui constitue un moteur 3d.
ps : Tu auras au moins réussi à impressionner Metanil, même si ce n'est pas un exploit en soi.
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 13 nov. 2007 à 20:05
J'ai pleins de mots à googler, et j'ai pas mal de boulot pour que ça faisse un "vrai" moteur 3d. Tout à fait d'accord.
En fait si j'ai poster mon code, c'est justement parce que un moteur 3d qui sert à quelque chose ça fait des miliers de lignes. Donc, pour quelqu'un qui veut pas s'arracher les cheveux 10 ans à comprendre un moteur 3d libre, il faut mieux un exemple de 350 lignes qui se balaye rapidement... ne m'en veuillez pas si vous pouvez faire mieux.
De toute façon, un moteur 3d est théoriquement un programme qui transforme une situation 3d en une image 2d. Si ce programme ne remplie pas les conditions, proposez-moi un titre plus explicite que : Squelette de moteur 3d.
J'ai mis ça en initié, parce que je sais pas ce que ça veut dire : on parle du nombre de ligne (0-500 : débutant, 500-1500 : initié, ... auquel cas je me suis trompé) ou alors de la complexité du code (45-120mn pour comprendre le code en sa totalité, ..., la je n'en suis pas loin pour quelqu'un qui ne connait pas l'API Windows et les matrices). Je met initié, comme ça je me trompe le moins possible.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 13 nov. 2007 à 19:55
Quelques lignes de plus ?
Un moteur 3D, c'est des centaines de milliers de lignes.
Cyberboy2054
Messages postés173Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention22 août 2008 13 nov. 2007 à 19:28
Bah la notion de matrice c'est pas non plus à la portée du premier venu je pense.
Mais bon c'est vrai que pour mettre "moteur 3d" faudrait qu'il y ait un peu plus:lignes (pas tres difficile), triangles plein, eclairage (la galere commence ici), puis ben pour du temps reel optimiser le rendu: eviter le pixel overdraw (dessiner inutilement 2 fois un meme pixel, dans le cas ou 2 triangles sont l'un derriere l'autre), trier les faces par rapport a la possibilité de vision (frustum culling, octree)
Ca y est, tu a plein de mots à googler :) Bon courage ;)
pgl10
Messages postés380Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention29 octobre 202311 13 nov. 2007 à 10:06
Ce programme fonctionne bien.
Mais pourquoi indiquer : "Jusque de quoi faire un moteur 3d" ? Il ne semble pas qu'il aille jusque là !
De plus, pourquoi indiquer : "Niveau : Initié" ?
Ce programme peut servir à démontrer un emploi élémentaire des coordonnées homogènes pour ceux qui veulent examiner cela de manière pratique.
_michel
Messages postés77Date d'inscriptionmardi 27 juin 2006StatutMembreDernière intervention12 août 2010 12 nov. 2007 à 21:50
Shenron666 : "Sinon la gestion des ombres, des collisions, du son, de l'interaction bref tout ce qui fait un moteur... c'est où ?"
Justement, mon but n'est pas de faire un moteur physique (c'est de ça que tu veux parler je crois), je préfère les maths (c'est aussi pour ça que je poste dans Maths).
Et vous parlez de librairies graphiques. Mais mon but c'est avant tout d'apprendre (quand tu parle du coté éducatif tu es en plein dedans), et laisser faire tout ce boulot par autre chose, ça m'interesse pas. En plus, si on retire tout ça, il reste quoi ? Juste le scénario et les monstres pour tirer dessus, mais ça Quake III le fait déjà très bien.
Après on peut dire que je ferais de ma vie que de réinventer la roue, mais si je m'éclate... tant que je suis pas obligé de manger avec ça.
shenron666
Messages postés229Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention20 août 2014 12 nov. 2007 à 21:12
Waouh un moteur 3D qui tient en 10Ko de code et sur un seul fichier svp !!! impressionant
Sinon la gestion des ombres, des collisions, du son, de l'interaction bref tout ce qui fait un moteur... c'est où ?
Je me demande pourquoi tout le monde utilise le terme "moteur 3d" dès qu'ils arrivent à afficher 3 triangles à l'écran.
Trève de plaisanterie, pour le côté éducatif du calcul de matrices dans un espace homogène en 3 dimensions c'est un bon petit exemple
tu devrais te mettre à directx ou opengl, tu t'amuserais plus
23 nov. 2007 à 23:23
Oui, très !
Le traitement d'image me semble aussi intéressant, mais j'ai du temps, et je vais prendre mon temps...
21 nov. 2007 à 10:48
1°) PhotModeler a besoin de deux photos en stéréo pour relever les 3 coordonnées d'un point. Cependant il existe des cas particuliers où on peut donner soit l'illusion du 3d avec une seule photo : http://www.youtube.com/watch?v=VuoljANz4EA soit même un vrai modèle 3d avec une seule photo : http://www.youtube.com/watch?v=nice6NYb_WA Mais cela sort du contexte actuel.
2°) Si on passe d'un nuage de points 3d à l'affichage d'un modèle d'objet définis par des points 3d je pense que l'on peut valablement parler d'un "modeleur d'objet 3d défini par points" et pas seulement d'un afficheur.
21 nov. 2007 à 10:01
http://homes.dsi.unimi.it/~borghese/Research/LinesResearch/Scanner/3DScanning.html
http://www-i8.informatik.rwth-aachen.de/uploads/media/points.pdf
Mais avec Google on peut en trouver beaucoup d’autres.
Donc, en remplaçant le réseau de points par la lecture d'un fichier de points puis par un traitement avant l'affichage on obtiendrait, sur la base de ce logiciel, non pas un "modélisateur de points 3d" mais un afficheur de modèles d'objets définis par des points 3d.
Quant à l'obtention des points 3d il y a de très nombreuses solutions : scanner 3d, etc. Et même le logiciel gratuit : PhotoModeler qui permet de partir d'une simple photographie.
C'est une perspective intéressante, non ?
20 nov. 2007 à 21:58
D'accord, je comprend mieux. Et je parie que c'est plus rapide de le faire en hardware que en soft (c'est pour ça qu'une bonne carte graphique coute le prix de 3 PC bas de gamme).
Dorénavant je vais appeler mon programme "modélisateur de points 3d", avant de m'attaquer aux surfaces (c'est bien ça qui vous manque, non?).
19 nov. 2007 à 01:03
je suis entièrement d'accord avec toi point de vue intérêt mathématique pur.
C'est très intéressant, j'y ai moi-même passé un certain temps.
Cependant, l'opposition qui ressort des commentaires vient de ta notion de "moteur 3D".
Un moteur 3D n'est pas "quelque chose" ( je suis volontairement flou ) qui t'affiche des polys à l'écran.
Un moteur 3D est un programme d'une complexité redoutable, qui pour simplifier à l'extrême, sélectionne les polygones que le "quelque chose" doit afficher, et qui lui dit comment le faire.
A propos du quelque chose :
Soit tu le fais en software. Tout en CPU. Ca s'appelle MESA sous Linux, ya d'autres solutions sous Win32 je crois.
Soit tu le fais en hardware. Avec ta carte graphique, que tu lui dis " affiche moi tel poly ", et il le fait à la hauteur de 3 millions de fois par secondes environ, pendant que toi tu fais autre chose.
Avis aux autres : un moteur 3D ne tient absolument pas compte d'une quelconque interaction. C'est le rôle du moteur physique, du gestionnaire d'évènements, de(des) l'AI(s), de la timeline et du scénario, etc. Et perso je trouve pas franchement que ça rentre dans le cadre de ce que l'on appelle communément un "moteur 3D".
voilà !
Et merci Brunews pour ton sens du fun :) j'aime :)
18 nov. 2007 à 21:32
18 nov. 2007 à 20:56
xmm = registre 128 bits, ou je n'ai rien compris.
Si je veut agir sur des long (4 octets, 32 bits) et non sur des mots de 16 octets, il n'y pas grand chose à modifier :
utiliser mov au lieu de movadp
utiliser les registre du coprossesseur arithmétique au lieu des registres xmm (Donc utiliser les opérations du coprossesseur)
Pour ma culture générale, XMM est bien une technologie intel ?
18 nov. 2007 à 00:23
17 nov. 2007 à 23:52
Je laisse le même code ici, pour que ça reste compréhensible!
14 nov. 2007 à 19:02
Que fait 'ret 4' ?
'ret' est l'instruction de remise dans EIP (pointeur d'instruction) de ce qui est en [esp] provoquant la suite du prog à l'adresse EIP, ce qui suit est le nbr d'octets à remonter ESP (pointeur de pile) après le POPage de EIP.
14 nov. 2007 à 18:56
14 nov. 2007 à 00:36
Listing compilo en full optim et SSE2:
- 50 instructions dont 16 MUL et 36 accès mémoire.
Listing dessous:
- 36 instructions dont 8 MUL et 12 accès mémoire.
void __fastcall MatriceMultipli_14_44ASM(double *m_1, double *m_2, double *m_s)
{
__asm {
movapd xmm2, [ecx]
movapd xmm3, [ecx+16]
mov eax, [esp+4]
movapd xmm0, xmm2
movapd xmm1, xmm3
mulpd xmm0, [edx]
mulpd xmm1, [edx+16]
movapd xmm4, xmm2
movapd xmm5, xmm3
addpd xmm0, xmm1
mulpd xmm4, [edx+32]
mulpd xmm5, [edx+48]
movapd xmm1, xmm0
addpd xmm4, xmm5
psrldq xmm1, 8
unpcklpd xmm5, xmm4
addsd xmm1, xmm0
addpd xmm5, xmm4
movapd xmm0, xmm2
movsd xmm5, xmm1
movapd xmm4, xmm3
mulpd xmm0, [edx+64]
mulpd xmm4, [edx+80]
movapd [eax], xmm5
addpd xmm0, xmm4
mulpd xmm2, [edx+96]
mulpd xmm3, [edx+112]
movapd xmm4, xmm0
addpd xmm2, xmm3
psrldq xmm4, 8
unpcklpd xmm3, xmm2
addsd xmm0, xmm4
addpd xmm3, xmm2
movsd xmm3, xmm0
movapd [eax+16], xmm3
ret 4
}
}
Tu auras au moins une fonction de moteur qui a de la reprise et du couple.
Bonne nuit à tous.
13 nov. 2007 à 21:29
ombres : OK, c'est du visuel.
Mais le reste (son, interactions, collisions), c'est moteur son et moteur physique.
source : Wikipedia (à moins que j'ai mal lu)
Sinon, mon "bout de code" compile et marche indépendament! Ce n'est pas un 'orteil' de moteur 3d, c'est un 'squelette' (lol).
"Déjà tu n'as pas la notion de ce qu'est un "moteur" en informatique.[...]C'est même pas 1% de ce qui constitue un moteur 3d." Je suis pas en foncièrement en désaccord, mais j'essai d'apprendre et c'est déjà une base pour continuer.
En plus, vous avez déjà vu une source simple comme la mienne? Moi, non, c'est pour ça que j'ai posté. J'espère juste que ça va servir à quelqu'un.
Metanil : et toi, tu joue à quoi?
13 nov. 2007 à 20:54
ps : Tu auras au moins réussi à impressionner Metanil, même si ce n'est pas un exploit en soi.
13 nov. 2007 à 20:05
En fait si j'ai poster mon code, c'est justement parce que un moteur 3d qui sert à quelque chose ça fait des miliers de lignes. Donc, pour quelqu'un qui veut pas s'arracher les cheveux 10 ans à comprendre un moteur 3d libre, il faut mieux un exemple de 350 lignes qui se balaye rapidement... ne m'en veuillez pas si vous pouvez faire mieux.
De toute façon, un moteur 3d est théoriquement un programme qui transforme une situation 3d en une image 2d. Si ce programme ne remplie pas les conditions, proposez-moi un titre plus explicite que : Squelette de moteur 3d.
J'ai mis ça en initié, parce que je sais pas ce que ça veut dire : on parle du nombre de ligne (0-500 : débutant, 500-1500 : initié, ... auquel cas je me suis trompé) ou alors de la complexité du code (45-120mn pour comprendre le code en sa totalité, ..., la je n'en suis pas loin pour quelqu'un qui ne connait pas l'API Windows et les matrices). Je met initié, comme ça je me trompe le moins possible.
13 nov. 2007 à 19:55
Un moteur 3D, c'est des centaines de milliers de lignes.
13 nov. 2007 à 19:28
Mais bon c'est vrai que pour mettre "moteur 3d" faudrait qu'il y ait un peu plus:lignes (pas tres difficile), triangles plein, eclairage (la galere commence ici), puis ben pour du temps reel optimiser le rendu: eviter le pixel overdraw (dessiner inutilement 2 fois un meme pixel, dans le cas ou 2 triangles sont l'un derriere l'autre), trier les faces par rapport a la possibilité de vision (frustum culling, octree)
Ca y est, tu a plein de mots à googler :) Bon courage ;)
13 nov. 2007 à 10:06
Mais pourquoi indiquer : "Jusque de quoi faire un moteur 3d" ? Il ne semble pas qu'il aille jusque là !
De plus, pourquoi indiquer : "Niveau : Initié" ?
Ce programme peut servir à démontrer un emploi élémentaire des coordonnées homogènes pour ceux qui veulent examiner cela de manière pratique.
12 nov. 2007 à 21:50
Justement, mon but n'est pas de faire un moteur physique (c'est de ça que tu veux parler je crois), je préfère les maths (c'est aussi pour ça que je poste dans Maths).
Et vous parlez de librairies graphiques. Mais mon but c'est avant tout d'apprendre (quand tu parle du coté éducatif tu es en plein dedans), et laisser faire tout ce boulot par autre chose, ça m'interesse pas. En plus, si on retire tout ça, il reste quoi ? Juste le scénario et les monstres pour tirer dessus, mais ça Quake III le fait déjà très bien.
Après on peut dire que je ferais de ma vie que de réinventer la roue, mais si je m'éclate... tant que je suis pas obligé de manger avec ça.
12 nov. 2007 à 21:12
Sinon la gestion des ombres, des collisions, du son, de l'interaction bref tout ce qui fait un moteur... c'est où ?
Je me demande pourquoi tout le monde utilise le terme "moteur 3d" dès qu'ils arrivent à afficher 3 triangles à l'écran.
Trève de plaisanterie, pour le côté éducatif du calcul de matrices dans un espace homogène en 3 dimensions c'est un bon petit exemple
tu devrais te mettre à directx ou opengl, tu t'amuserais plus