MOTEUR 3D SOFTWARE SOUS WINDOWS (+EXE)

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 12 juil. 2003 à 14:00
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 25 févr. 2006 à 14:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11089-moteur-3d-software-sous-windows-exe

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 févr. 2006 à 14:49
J'étais étonné pour les float >< double, il me semblait que c'était une idée reçue, mais pour le Pentium III en tout cas, tu sembles bien avoir raison:

"This table shows performance relative to a standard 32-bit assignment operation (value 1.00). Larger numbers indicate better performance. A value of 2.0 would be twice as fast as 32-bit assignment. A value of 0.5 would be twice as slow."

http://www.tantalon.com/pete/cppopt/appendix.htm#AppendixB

" Float operations are typically 1.5 to 2 times faster than double operations. If you can afford the loss of precision, float is the best floating-point type."

Intéressant aussi: les temps de conversions entre types (même page, appendice C)
oplibulartj Messages postés 1 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 25 février 2006
25 févr. 2006 à 11:57
Bonjour. Je ne pense pas que beaucoup de gens liront ce topic, mais je tenais à dire que j'ai étudié cette source, et que la fonction chargée du remplissage des polygones peut être largement optimisée. Tout d'abord, si on veut à tout prix utiliser des nombres réels, il vaut mieux, pour le calcul des pentes du triangles, utiliser des floats au lieu de double. Deuxièmement, allouer et désallouer un tableau de repères de scanlines à chaque appel de la fonction de remplissage de polygônes est coûteux en temps machine, mieux vaut déclarer deux tableaux globaux, ou au moins les passer par adresse pour les réfractaires aux variables globales. Ensuite, on peut tout simplement se passer des nombres entiers pour ce genre d'algorithmes, en utilisant la méthode du "fixed point math" (google, "fixed point math"). Cette méthode permet d'utiliser des entiers comme si c'était des flottants, en découpant virtuellement les entiers en deux parties (partie fractionaire, partie entière). Ensuite, la fonction de traçage d'une ligne horizontale peut être inclue directement dans la routine de remplissage, on gagne en rapidité. Evidemment, le "fixed point math" peut s'appliquer à tous les calculs 3D. Je reste volontairement vague en ne fournissant pas d'exemples, car je ne suis pas sûr que ce topic intéresse quelqu'un, vue l'ancienneté du post. Si je vois que ma petite prose intéresse quelqu'un, je fournirais un exemple pratique avec SDL, afin que les utilisateurs puissent compiler mon code sous windows, linux, atari, etc ... Bonne lecture (pour ceux qui lisent). Dernier point : Je n'ai pas eu l'idée de faire ces optimisations tout seul, j'ai juste récupéré et synthétisé des infos sur le net. Dernière minute : Pour une bonne compréhension du "fixed point math", je recommande humblement de lire le code source de la bibliothèque allegro.

djulzz
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008
30 sept. 2003 à 18:37
DarkBoss ramèn pè é trankilité sur ce forum !!!
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
17 juil. 2003 à 17:14
Pas de grossierete merci !
cs_Arkko Messages postés 192 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 31 janvier 2007
17 juil. 2003 à 16:50
Hey Haldwin ... TA GEULE !!! c'est bien la concurence ... ca fait des meilleures sources car ils veulent etre meilleure que l'ancienne ...
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
17 juil. 2003 à 09:44
Ami ... mais on la toujours ete non ?
Haldwin Messages postés 77 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 16 juin 2004
17 juil. 2003 à 09:44
Ce site est visité par de plus en plus d'ados boutonneux en pleins dans leur crise.... Dommage c'etait plus cool avant! Maintenant j'ai l'impression qu'on ne parle plus que performance "moi je suis meilleur que toi!! Mais non c'est moi le meilleur!Va voir ma source..." Navrant d'autant plus que il n'y a pas de gros balezes de la prog sur ce site!! Alors siouplait arretez de vous prendre pour des brutes, soyez humble, merde!
<<-- H@ldwin -->>
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juil. 2003 à 22:11
ouais t'as raison zen, pr la petite histoire, casser = mettre une personne avec le nez devant la stupidité de sa remarque, c pas belge, à la base c français (cf Jean Dujardin dans les très bons sketches de Brice de Nice, à voir absolument! dispo un peu partout sur le net, il y en a 1 + 4)
pr la définition, je vois mal comment l'expliquer autrement, mais tt de suite avec des mots ça fait plus méchant que le terme "casser" en lui-même. on se quittes amis jcd? ;-)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
16 juil. 2003 à 19:28
Hum hum je pense que le debat va s'arreter ici :) pas la peine de se foutre sur la figure (normalement l'expression est plus grossiere :p) zen les amis :)
cs_Arkko Messages postés 192 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 31 janvier 2007
16 juil. 2003 à 17:27
Ouip c'est pas tout le monde qui vient de la belgique ... moi je suis du Québec et les expressions belges et europennes j'en connais seulement quelque unes que j'ai apris sur msn :D !!!
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
16 juil. 2003 à 14:46
??? je ne comprends pas ce que tu veux dire !
He oui, je ne suis pas intelligent comme toi !
Alors explique ce que vous appeller cassage ??
(enfin vous ... tu crois que c'est toute la Belgique ...)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juil. 2003 à 14:40
jcd j'ai posté y a même pas une semaine, dans la catégorie OpenGL. http://www.cppfrance.com/article.aspx?Val=2209
en belgique on appelle ça un cassage.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
16 juil. 2003 à 14:34
Kirua, tu parles tu parles, MAIS tu fais rien !
Alors evite ce genre t'alusion foireuse !
C'etait deux programmes differents !
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juil. 2003 à 19:28
c'est vrai qu'un code comme celui-ci sort du lot, c'est pas tous les jours, quand on voit des fusionneurs / défusionneurs de fichiers tout cons postés en deux sources, ceci détonne. encore bravo.
cs_Arkko Messages postés 192 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 31 janvier 2007
15 juil. 2003 à 19:01
Je crois franchement que ca mériterais un trophée (mrd je suis pas admin) ... j'espere que les modérateurs sont du meme avis que moi !!
cs_Nicolus Messages postés 16 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 15 juillet 2003
15 juil. 2003 à 18:57
merci beaucoup ca fait plaisir de voir que mon travail est apprecie par d'autres programmeurs!
pour la peine, je mets l'exe pour ceux qui peuvent pas compiler ou qui ont la flemme ;))
cs_Arkko Messages postés 192 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 31 janvier 2007
15 juil. 2003 à 05:11
Wow .... C'EST TRES [...] TRES BIEN ! .... ‡/10
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
13 juil. 2003 à 22:29
point de vue math O_o créer un moteur 3D c énorme. en fait je suis étonné que ce ne soient que 90 000 caractères. pr un bête jeu que je suis en trai nde créer et qui utilise OpenGL je suis déjà à 66Ko de sources (commentée allègrement)
bonne continuation, tu pourras en faire qq ch de grand ;-)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
13 juil. 2003 à 14:51
Oui, effectivement t'es sacrement baleze!!! Pareil je te mets 10/10! T'as du passer un temps dingue là dessus!
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
12 juil. 2003 à 21:09
un exe !
cs_Nicolus Messages postés 16 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 15 juillet 2003
12 juil. 2003 à 20:39
pour JCDjcd : c'est simplement pour eviter un appel de fonction
et pour lenght, j'ai effectivement oublié de vérifier s'il était différent de 0.... oups.

pour Funto66 : merci ça fait plaisir! je vais rajouter des fichiers ASE dans le zip.
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
12 juil. 2003 à 19:52
T'as oublié de mettre les fichers .ASE..... dommage :(
Mais vu la taille du projet, j'ai fait un petit effort et je suis allé en chercher sur le net.
C'est vrai que t'es balèze ! Félicitations !
Je vais m'attarder un peu plus sur le charceur de fichiers ASE...
Allez, pour la peine : 10/10 !
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
12 juil. 2003 à 14:00
//////////////////////
// NormalizeVector3D()
//////////////////////
void NormalizeVector3D(VECT3D *v)
{
double lenght;


lenght = sqrt(v->x * v->x + v->y * v->y + v->z * v->z);

v->x /= lenght;
v->y /= lenght;
v->z /= lenght;
}

tu ne pourrais pas faire plutot
//////////////////////
// NormalizeVector3D()
//////////////////////
void NormalizeVector3D(VECT3D *v)
{
double lenght;


LenghtVector3D(v,&lenght);

v->x /= lenght;
v->y /= lenght;
v->z /= lenght;
}

et lenght est-il toujours != de 0 ??
Rejoignez-nous