begin process at 2012 05 27 18:47:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > MOTEUR 3D SOFTWARE SOUS WINDOWS (+EXE)

MOTEUR 3D SOFTWARE SOUS WINDOWS (+EXE)


 Information sur la source

Note :
8,71 / 10 - par 7 personnes
8,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Expert Date de création :12/07/2003 Date de mise à jour :29/09/2003 02:12:06 Vu / téléchargé :5 433 / 882

Auteur : Nicolus

Ecrire un message privé
Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
He ça fait plaisir de poster a nouveau!
Bon la voila le projet non terminé (mais tout de même assez avancé puisqu'il y a presque 90 ko de sources...) de moteur 3D entièrement software sous Windows (compilé avec VC++ 6)
il gère depuis la gestion de fichiers ascii 3D Studio Max jusqu'a l'affichage en gouraud. gestion de plusieurs sources de lumiere, des tranfo geometriques etc.
tout cela pourrait sembler inutile, vu qu'il existe des bib specialisees comme Direct3D ou OpenGL qui font ça très bien et utilisent les ressources matérielles spécifiques des cartes 3D (ce que mon prog ne peut pas faire), mais créer un moteur 3D de toute pièce, du simple affichage du point jusqu'au calcul des ombrages ou plaquages des textures, est très intéressant et très instructif.
Sinon c'est pas fini (de toute façon un moteur 3D n'est jamais fini), mais je pense que je reprendrai ce projet un jour ou l'autre. voila  

Source

  • // tout dans le zip (sources, models, exe)
 // tout dans le zip (sources, models, exe) 

 Conclusion

Les sources sont assez commentées, donc vous derviez pas avoir trop de problèmes à vous y retrouver. Par contre, je les ai commentées en anglais...
Sous VC++, créez un projet et mettez y toutes les sources de l'archive (8 *.h, 8 *.c). Puis compilez.
Vous pouvez rajouter des objets, des sources de lumiere, ou rajouter des transfo geometriques auto (par ex, l'objet tourne autour d'un de ses axes). si vous avez un pb (les sources sont peu commentees, et un peu fouillis vu que le projet est en construction), prevenez moi, j'essaierai de vous aider

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture MECAPHI (SIMULATEUR DE TRAJECTOIRES)
GESTION DES LISTE CHAINÉES
Source avec Zip Source avec une capture JEU D'ECHECS WINDOWS AVEC IA (+EXE)
Source avec Zip Source avec une capture ENLEVER LES MSG D'AVERTISSEMENT DES PROG VC++ INTRODUCTORY E...
Source avec Zip Source avec une capture EASYPROTECT (CRYPTAGE DE FICHIERS)

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

Commentaires et avis

Commentaire de JCDjcd le 12/07/2003 14:00:51

//////////////////////
// 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 ??



Commentaire de Funto66 le 12/07/2003 19:52:35

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 !

Commentaire de Nicolus le 12/07/2003 20:39:30

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.

Commentaire de eldered le 12/07/2003 21:09:02

un exe !

Commentaire de Wett le 13/07/2003 14:51:24

Oui, effectivement t'es sacrement baleze!!! Pareil je te mets 10/10! T'as du passer un temps dingue là dessus!

Commentaire de Kirua le 13/07/2003 22:29:11

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 ;-)

Commentaire de Arkko le 15/07/2003 05:11:30

Wow .... C'EST TRES [...] TRES BIEN ! .... ?/10

Commentaire de Nicolus le 15/07/2003 18:57:46

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 ;))

Commentaire de Arkko le 15/07/2003 19:01:28

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 !!

Commentaire de Kirua le 15/07/2003 19:28:15

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.

Commentaire de JCDjcd le 16/07/2003 14:34:40

Kirua, tu parles tu parles, MAIS tu fais rien !
Alors evite ce genre t'alusion foireuse !
C'etait deux programmes differents !

Commentaire de Kirua le 16/07/2003 14:40:11

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.

Commentaire de JCDjcd le 16/07/2003 14:46:15

??? 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 ...)

Commentaire de Arkko le 16/07/2003 17:27:54

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 !!!

Commentaire de Wett le 16/07/2003 19:28:51

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 :)

Commentaire de Kirua le 16/07/2003 22:11:47

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? ;-)

Commentaire de Haldwin le 17/07/2003 09:44:32

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 -->>

Commentaire de JCDjcd le 17/07/2003 09:44:54

Ami ... mais on la toujours ete non ?

Commentaire de Arkko le 17/07/2003 16:50:39

Hey Haldwin ... TA GEULE !!! c'est bien la concurence ... ca fait des meilleures sources car ils veulent etre meilleure que l'ancienne ...

Commentaire de JCDjcd le 17/07/2003 17:14:20

Pas de grossierete merci !

Commentaire de DarkBoss le 30/09/2003 18:37:08

DarkBoss ramèn pè é trankilité sur ce forum !!!

Commentaire de oplibulartj le 25/02/2006 11:57:48

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

Commentaire de Kirua le 25/02/2006 14:49:00

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)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales