Terrain 3d, lod et réflexion

Soyez le premier à donner votre avis sur cette source.

Vue 15 551 fois - Téléchargée 2 056 fois

Description

J?ai réalisé cette source pour mettre en avant l?utilisation d?un LOD pour un terrain 3D (Niveaux de détails en fonction de la distance d?un objet).
Cette Source permet :
Affichage d?un terrain 3D avec l?utilisation d?un LOD.
Affichage de l?eau avec réflexion et bump mapping.
Affichage de la végétation.

Conclusion :


Projet développé avec Visual Studio .Net 2003 et le SDK DirectX 9.0c.
Vous pouvez télécharger l?exécutable et les textures à l?adresse suivante :
http://perso.wanadoo.fr/mesprog/programmes/Terrain 3D et LOD.zip

Configuration des touches :
Echap : sortie du programme
Espace : récupérer le curseur de la souris
F1 : Filtrage Bilinéaire des textures
F2 : Filtrage Tilinéaire des textures (par défaut)
F3 : Filtrage Anisotropic des textures
F5 : Qualité Model faible
F6 : Qualité Model moyen (par défaut)
F7 : Qualité Model élevé

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Galmiza
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008

Salut,

Pas mal ta source, c'est propre et bien découpé.
Peux-tu compiler un exe qui permette de visualiser la scène en fil de fer (quand on appuye sur F par exemple), ça illustrerait bien l'objectif de la source.

Au fait, lorsque tu génères les indices pour le maillage LOD, pourquoi ajoutes-tu les indices des triangles de jointure entre les zones. Les triangles des modèles LOD, sont 2^(LOD+1) fois plus grands (en surface) et sont déjà joints puisque tu utilises la même poignet de vertices d'une boucle à l'autre quand tu génères la liste initiale avec la première boucle:

for(int z = 0 ; z < NB_TRIANGLE_R/LOD2 ; z++)
{
for(int y = 0 ; y < NB_TRIANGLE_R/LOD2 ; y++)
{
*pt++ = (y+1)*LOD2 + (z+1)*NB_VERTEX_R*LOD2;
*pt++ = (y+1)*LOD2 + (z)*NB_VERTEX_R*LOD2;
*pt++ = (y)*LOD2 + (z)*NB_VERTEX_R*LOD2;
*pt++ = (y)*LOD2 + (z)*NB_VERTEX_R*LOD2;
*pt++ = (y)*LOD2 + (z+1)*NB_VERTEX_R*LOD2;
*pt++ = (y+1)*LOD2 + (z+1)*NB_VERTEX_R*LOD2;
}
}
nan ?
cs_babboss
Messages postés
121
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
29 novembre 2006

Salut, ta source est geniale ^^
J'ai juste eu quelque petits problème a la compilé avec VS2005 :
j'ai du remplacer les :
LOD2 = int(pow(2, LOD));

par:
LOD2 = int(pow(2.0f, (float)LOD));

et je me suis d'ailleur demander si ce n'etait pas mieu de faire une simple multiplication aulieu de faire appel a pow() ?

Il y avait ensuite un problème a l'edition de liens car VS2005 Générai un Manifest alors qu'il y en avait deja un dans le projet. Il faut donc lui dire de ne pas générer de Manifest dans les options du projet.

J'espere que ca pourra aider ceux qui veulent compiler cette super source avec Visual Studio 2005 :)
dannygilbert3
Messages postés
1
Date d'inscription
mardi 18 avril 2006
Statut
Membre
Dernière intervention
4 novembre 2006

Salut ! Ton code est super. J'ai aimé tes 3 démos. Je ne comprends pas trop comment fonctionne les lumières. En fait selon la théorie (les bouquins de DirectX), il faut faire un RenderState de D3DRS_LIGHTING = TRUE pour activer les lumières. Le point est que j'aimerais bien éteindre la lumière ambiante pour pouvoir essayer une lampe de poche dans la scène que tu proposes. Lorsque je mets la lumière à OFF (D3DRS_LIGHTING, FALSE), ça ne fonctionne pas ou disons que c'est seulement le Sky Box qui disparaît. Dans ton exemple de mirroir et de bumping avec la chaise et le globe terrestre, seule la chaise disparaît. Je ne comprends pas pourquoi le reste est visible.

Merci.
cs_Bouteille
Messages postés
5
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
29 mai 2006

Super source !

J'avoue que je m'etais un peu inspiré de l'eau de ton dernier terrain mais la je suis bluffé... va falloir que je recommence ;)

non plus serieusement bravo, rien a dire de plus.
rei3
Messages postés
24
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
26 avril 2006

Voila comme tu l'a indiqué dans l'autre source il faut mettre le Depth Buffer en 16bits ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.