begin process at 2012 05 27 20:54:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

DirectX

 > TERRAIN 3D

TERRAIN 3D


 Information sur la source

Note :
9,72 / 10 - par 18 personnes
9,72 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :DirectX Classé sous :terrain, heightmap, multitexturing, billboarding, blending Niveau :Initié Date de création :22/11/2005 Vu / téléchargé :20 622 / 2 648

Auteur : rei3

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

 Description

Cliquez pour voir la capture en taille normale
Je mets à disposition un TP que j'ai réalisé pour le cours de DirectX.
Cette source permet :
La création d'un maillage à partir d'une map en niveaux de gris.
L'affichage de végétations avec la technique de Billboarding.
L'affichage de l'eau avec déplacement et transparence.
L'affichage d'une Skybox.
L'affichage du maillage avec mélange entre une image de terre et d'herbe.


 Conclusion

Les fichiers intéressant se trouvent dans le dossier Scène, les autres fichiers sont juste la pour mettre en place les outils nécessaires à l'utilisation de directX.

 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 TERRAIN 3D, LOD ET RÉFLEXION
Source avec Zip Source avec une capture RÉFLEXION : CUBE MAPPING, SPHÈRE MAPPING, MIROIR AVEC ENVIRO...

 Sources de la même categorie

Source avec Zip Source avec une capture MP3 DX9 JOUER par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture EQUINOX VISUAL SON METER par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture FLEUR EN DELIRE! par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture DIREXCT X 9 D3D par f_l_a_s_h_b_a_c_k
Source avec Zip BLOP DIRECT X par f_l_a_s_h_b_a_c_k

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture OPENGL SOUS LINUX par xave4552
Source avec Zip Source avec une capture MULTITEXTURING ET SHADER par vosgien88
Source avec Zip Source avec une capture CRÉATION D'UN TERRAIN AVEC OPENGL par eplanet
Source avec Zip Source avec une capture GÉNÉRATEUR DE LIGHTMAPS À PARTIR D'UNE HEIGHTMAP par Funto66
Source avec Zip Source avec une capture MOTEUR 3D DIMETRIQUE par Mattpbem

Commentaires et avis

Commentaire de DeAtHCrAsH le 22/11/2005 11:02:25

Peux-tu mettre l'executable que tu renommes en .ex_ dans le zip, car je ne dispose pas du SDK afin de recompiler ta source.
Merci par avance.

Shell

Commentaire de rei3 le 22/11/2005 12:42:17

Je peux pas le rajouter car le zip est trop gros après...

Commentaire de Mattpbem le 22/11/2005 13:15:39

compresse tes TGA en RLE et je pense que tu peux augmenter le taux de compression du Zip (ou fait un Rar bien compréssé que tu rennome en Zip)

Commentaire de DeAtHCrAsH le 22/11/2005 14:19:16

Ou alors donne un lien ou on peut télécharger l'executable comme beaucoup le font.
Trouve une solution ^_^

Shell

Commentaire de jmhC le 22/11/2005 19:01:53

Bon prog, bonne présentation, bonne continuation.
compilé sous code::Blocks avec compilateur MVC++ toolkit 2003! Juste une erreur dans les options de compilation passage de single en multi-threaded.

A++

Commentaire de rei3 le 22/11/2005 21:15:28

Merci ^^

Voici un lien avec juste l'exe et les ressources :

http://perso.wanadoo.fr/mesprog/programmes/Terrain 3D 2.zip

Commentaire de victorcoasne le 23/11/2005 07:50:31

Je ne dis qu'une chose : MAGNIFIQUE !
10/10 !

Commentaire de azerty25 le 23/11/2005 13:51:36

C'est sublime ! Merci et bonne continuation

Commentaire de shenron666 le 23/11/2005 22:25:43

Bravo pour le travail et aussi pour avoir déposé le code source, c'est rare une petite demo 3D de cette ampleur déposée ici, ça mérite un 10/10 pour tout ça, dommage que ce ne soit pas de l'OpenGL vu que j'aime pas DX mais bon on peut pas tout avoir ^__^

Commentaire de BruNews le 23/11/2005 23:05:39 administrateur CS

Vraiment superbe, surtout continue dans cette voie.

Commentaire de badrbadr le 23/11/2005 23:22:22

2 fois bravo, le screenshot est très beau et j'ai juste hate de rentrer chez moi pour l'essayer.
La qualité visuelle me fait penser à Far Cry (qqch de meme) avec son île paradisiaque, vous trouvez pas?

Mais j'ai une question, où est-ce que tu trouves les textures...est-ce que c'est toi qui les a fait ou encore tu les a pris de quelque part. Même chose pour le terrain 3d, je sais que pour l'avion, c'est directx mais ton terrain, t as fait comment pour générer les coordonnées.

Bonne continuation

Commentaire de Arnaud16022 le 23/11/2005 23:55:56

alors...
bon déja effectivement le screen est pas mal ca donne envie :p
pour le billboarding, perso je déteste ca, ca n'est bon que pour les particules ou presque, mais la tu as plutot bien géré ton coup le rendu est pas si mauvais au final.
pour l'eau: la translation de texture c'est d'un banal :D mdr
essaye plutot de faire des vagues. pour ca plusieurs solutions... soit tu te lances dans les fragment shaders (déconseillé...) mais résultat magnifique avec reflets sublimes, soit tu crées un modele 3d animé de vague ( voir exemple d'un tel fichier plus son loader openGL dans mon prog Sniper, qqpart dans le code ^^ ), soit tu fais ca avec des fonctions mathématiques en temps réel, je pense que c'est la meilleure solution, presque la plus rapide, et permettant d'obtenir un rendu pas mal du tout a peu de frais
pour les roseaux...c'est trop statique tout ca LOL. un petit conseil, je sais pas dans quelle mesure c'est faisable en DirectX, crée une matrice de déformation variant au cours du temps et multiplie la a la matrice actuelle, ca peut etre sympa, a esssayer du moins.
par contre méchant bug, ya un espece de carré a moitié texturé avec une couche alpha qui se ballade sous la map, si tu veux un screen ...
et pour l'avion, t'as pas piqué celui de CF3D? c'est pas une critique hein c'est juste qu'il me rappele celui de funto..
un seul point négatif, DirectX mdr ^^ avis personnel bien sur :D
bonne prog
++
ad

Commentaire de Arnaud16022 le 24/11/2005 00:04:44

je sais pas si t'es au ct mais ton site plante totalement...

Commentaire de Galmiza le 24/11/2005 12:16:45

Déja, 10/10 parce que tu n'as pas pris OpenGL (ça balance sur l'excellent DirectX avec lequel on peut TOUT faire, donc je ne me gene pas).
Le rendu est très bon. Pas spectaculaire mais presque professionnel.

Pour l'eau tu peux utiliser des shaders pour faire de la reflection et de la refraction plus effet vagues.
Tu fais un rendu de la scene sur une texture1 et un rendu de la scene symetrique par rapport au plan de l'eau (sans la partie sous l'eau, assez chiant à faire) sur une texture2.
En suite tu projetes un quad orthogonalement avec la texture1 sur le backbuffer (ca revient a avoir fait un rendu dessus directement).
Puis tu affiches le plan de l'eau avec en parametres du pixels shader la texture1, la texture2 et une texture de bump.
Apres c'est facile: tu peux afficher une eau 100% transparente si tu lui donnes les pixels de la texture1, 100% reflechissante si tu lui donnes les pixels de la texture2. Perso je fais une interpolation linéaire (refraction/reflection): plus sin((caméra-pixel),normale) au plan est proche de 0, plus c'est de la refraction.
Pour la déformation avec la texture bump, tu utilises juste le contenu de ses pixels pour modifier légerement les coordonnées des pixels que tu prends sur texture1 et texture2.

Voila voila, ca rend nickel ensuite. Exactement comme dans half-life 2, mieux que la démo du moteur ogre.
La seule difficulté est de calculer les coordonnées textures des pixels à utiliser en fonction de la position 3D du point de l'eau considéré.


En espérant avoir été clair.
DirectX, lui, permet facilement et INTUITIVEMENT de coder tout ça. Tu as donc fais le bon choix (et ça rebalance ...).

Commentaire de Arnaud16022 le 24/11/2005 12:37:58

hum
oué pas com, je pensais bien qu'il fallait renderiser sur une texture mais apres ca m'embetait pour la suite
t'es sur qu'on peut pas faire ca non plus avec un vertex ou fragment shader ? note bien que je n'en sais rien du tout ^^
tu dis qeu DirectX permet de coder ca intuitivement... ya moyen de voir un bout de code pliz ? juste par curiosité... merci
ciao
ad

Commentaire de Galmiza le 24/11/2005 13:36:23

C'était juste pour zapilser OpenGL ;), vu que personne ne défendait DirectX...
[mode philo]En fait "intuitif" n'est pas bien adapté. Car lorsque l'on a assimiler la logique de la librairie, tout devient limpide et on peut aisement tout trouver tout seul, en suivant cette logique. C'est un peu pareil avec la programmation windows, tous ces evenements... Dans ce cas, tout logiciel peut devenir intuitif (peut-être pas IDEAS en fait), au bout de plus ou moins de temps.[\mode philo]

Tu peux bien sur faire l'équivalent avec une dérivée d'un environnement mapping sur une surface "gondolée" (à la FarCry si ma mémoire visuelle est bonne et surtout si c'est ça dont tu veux parler). L'avantage est que ça rend bien sur les bords et que tu peux adapter la déformation des reflets/refract à la situation via un moteur physique (moteur utra simplifié car dédié) car tu controles les vertex.

Inconvénients: des vertex (donc projections) en plus, et un important flux via le port AGP si tu veux mettre à jour toi-même la position des vertex (pour moteur physique). Sinon tu balances des données pour le vertex shader et tu déduis les positions de tous les vertex (FarCry again).


Un screen de mon essai: http://mapage.noos.fr/galmiza/Other/Water_scr01.JPG

Je ferai un code lisible quand je me replongerai dedans et quand j'aurai eradiqué des bugs pas trop mineurs (invisibles sur le screen) à propos du rendu de la scene au dessus de l'eau à l'envers:
Le stencil est possible mais implique d'autres rendus => long, actuellement je fais une comparaison de profondeur avec l'eau mais ça implique d'inverser la comparaison du Ztest (affiche si derriere) donc il faut trier les objets à rendre par ordre de profondeur et leur donner des formes adaptées. Ca fait longtemps que j'ai fait une pause dessus, je ne souviens plus trop des autres détails génants.

Commentaire de rei3 le 24/11/2005 14:05:01

Merci pour vos commentaires ça fait plaisir :)
Alors pour répondre un peu aux commentaire :
BADRBADR : les textures j’essaye de les récupérer ou je peu, les arbres vient de photo récupéré sur le net et la texture de terre et d’herbe de Unreal. Pour le terrain je crée un maillage de 128 sur 128 carrés et je modifie l’altitude des points du maillage en fonction d’une image en niveau de gris.
ARNAUD16022 : pour l’utilisation des shader je suis pour mais comme le prof avait un portable avec une carte graphique intégré, ce n’était même pas la peine d’y penser, c’est pour ça que j’ai limité au minimum les objets animés :p et c’est pour ça que j’ai utilisé le billboarding pour ne pas avoir trop d’objet 3D ^^. L’avion y vient de SDK de DirectX :p. Quand au bug vi j’aimerai bien voire un screen ^^ et pour le site bien je c’est pas sur tout les pc ou j’ai essayé ça marchais peut être ça viens du navigateur.
GALMIZA : t’inquiète des que j’aurai le temps je passe au shader, puis j’ai très bien compris ce que tu voulais faire, je fais déjà des rendu sur des textures pour faire de la réflexion mais sans shader :p.
Voila puis vive DirectX j’ai commencer par ça et je ne regrette pas mon choix et je le préfère a OpenGL car certes pour les débutant c’est plus facile mais des que l’on veux faire des truc un peu plus poussé ça devient vite galère et les extension et touts.

Commentaire de SpEeDy_Fire le 24/11/2005 20:50:22

Rarement vu quelque chose d'aussi bonne qualité, ça donne envie de se mettre au graphisme.
10/10

Commentaire de vecchio56 le 26/11/2005 01:18:24 administrateur CS

C'est très joli, je vais être obligé d'installer le sdk dx9 moi!

Commentaire de Galmiza le 03/12/2005 21:26:18

J'ai posté une source qui introduit les pixels shaders avec DirectX. Ca te permettra de te familiariser avec le langage et peut-être, je l'espère, te motivera pour apprendre.

Les vertex shaders sont peu différents: ils peuvent aussi recevoir des constantes depuis le programme C++, ont accès aux propriétés des vertex (position, normale, binormale, coordonnées textures, bref tout ce qui compose le format de vertex), et peuvent envoyer des valeurs au pixel shader (qui va être executé ensuite) via les sorties oTi (ti dans le pixel shader), mais surtout ils permettent de calculer soi-même la position du projeté du vertex sur le backbuffer (généralement le résultat du produit de la matrice de projection par le vertex).

Je vais très certainement poster incessement sous peu une source sur les vertex shaders.

Commentaire de victorcoasne le 04/12/2005 21:49:52

C'est peut-être une question bête mais est-ce que ça marche sous Dev-Cpp ?

Commentaire de Arnaud16022 le 05/12/2005 00:00:04

pas de raison que ca marche pas...
ca me fait penser que j'ai tjs pas envoyé le screenshot... je fais ca demain promis ^^

Commentaire de victorcoasne le 05/12/2005 18:50:22

Je pensait qu'il falait DirectX SDK

Merci

Commentaire de BruNews le 05/12/2005 19:03:58 administrateur CS

DirectX SDK est obligatoire pour créer le prog sur le pc de dev, normal comme pour toute lib, faut bien que le linker trouve les points d'entrée des fonctions.
Le client n'a besoin que d'avoir le runtime DirectX.

Commentaire de rei3 le 06/12/2005 09:07:22

J'ai deja programmé en shader (avec du CG) pour faire in plug-in pour winamp mais comme le pc ou j'ai developpé mon programme n'en avais pas alors je les ai pas utilisé :p
Si tu veux utiliser Dev-Cpp il faut récuppérer les lib qui on été complié pour car celle du sdk de directx ne marche que pour visual mais sinon il y a rien a changer au code.

Commentaire de Arnaud16022 le 06/12/2005 19:54:36

heu dsl mais pour le screen il me faut une adresse a laquelle l'envoyer....

Commentaire de williamprotti le 10/12/2005 10:58:55

joli!!!! presque mieux que farcry :P!! chouette vraimetn!

Commentaire de raoullevert le 11/12/2005 22:11:44

J'ai été pas mal impressionné par ton code. C'est propre et ca rend terriblement bien. J'ai juste eu un soucis avec le PC qui me sert a developper (Athlon 1.5 + ATI 7500 VE familly), a savoir que le haut des collines n'est pas rendu, et j'ai a la place une espèce de brouillard bleuté. Ca doit venir du PC ;-).Sinon c'est fluide, ca fait plaisir ...
  Je decouvre le DX, après avoir codé avec GL et ton code est un super tuto, merci.

Commentaire de rei3 le 12/12/2005 09:35:17

Arnaud16022 : Merci pour ton screen :) ce que tu vois est normale en fait c'est le bord du quad de l'eau ou l'alpha doit pas etre tout a fais au max, il faut juste éffacer le bord de la texture :) enfin c'est pas bien grave ^^

Williamprotti : merci ^^

Raoullevert : merci j'espère que ce code servira à un maximun de personnes ^^

Commentaire de poulpixx le 09/01/2006 00:53:37

c'est vraiment très bon!!! Bravo a toi.

Commentaire de Bidou le 19/02/2006 19:40:59 administrateur CS

Très beau à voir, faut l'avouer....

Commentaire de rei3 le 28/02/2006 01:02:55

Merci ca fais plaisir ^^

Commentaire de SAKingdom le 22/04/2006 15:41:30

Non ici non plus ça marche pas. J'ai le meme message d'erreure et les meme messages dans la console que ce que je t'ai décrit dans ton second Terrain 3D.

Commentaire de rei3 le 23/04/2006 17:58:37

C'est pas normal car j'ai essayer sur une gf mx440 et ca marche nikel. Il y a un problème a initialisation du device.

Commentaire de SAKingdom le 23/04/2006 22:27:51

D'où ça peu bien venir. C'est DirectX qui marche pas ou c'est la carte qui supporte pas? Le problème dans ton code ce situe exactement ici:
if (m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, &m_d3dpp, &m_pD3DDevice) != D3D_OK)
// si la création en mode HARDWARE à échoué, on crée le device en mode SOFTWARE (calcule des vertex par le CPU)
if (m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &m_d3dpp, &m_pD3DDevice) != D3D_OK)
{
Console << "Impossible d'initialiser le peripherique 3D" << endl;
return false;
}

Commentaire de SAKingdom le 23/04/2006 22:34:03

Oki sa marche jai desactiver le depth buffer
m_d3dpp.EnableAutoDepthStencil = FALSE;
Mais les textures sont étranges. Les herbes et le fleurs ne saffiche pas si on les regardes de par dessus.

Commentaire de SAKingdom le 23/04/2006 22:49:06

Bingo tout fonctionne. Jai réactiver le depth buffer mais avec un format différent:

m_d3dpp.EnableAutoDepthStencil = TRUE; m_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

Commentaire de rei3 le 26/04/2006 18:28:20

Il est vrais que sur les vielle cartes elle ne supporte pas le Depth Buffer en 24bits ^^, mais ce que je trouve le plus bizard c'est que j'ai revérifié les caps de ma gf4 440 et elle supporte le Depth Buffer en 24bits, comment ca se fait que nos carte soit diférente O_o? enfin l'important c'est que ca marche maintenant ^^

Commentaire de SAKingdom le 26/04/2006 22:36:54

Ta carte est-elle de modele MX ou TI. La différence est peut-être là.

Commentaire de rei3 le 27/04/2006 01:05:44

vi c'est bien une geforce4 mx 440, lol je savais pas qui y avais un modèl en dessous :/

Commentaire de SAKingdom le 27/04/2006 01:15:55

Non c'étais pas ça le problème. C'est que j'étais pas en couleur 32 bits, j'étais en 16 bits. Donc impossible de charger un depth buffer de 24bits en 16bits.

Commentaire de rei3 le 27/04/2006 12:43:52

Ah oki c'est bon à savoir ^^ j'avais jamais essayé cette combinaison.

Commentaire de gadourpro le 08/05/2006 10:33:23

bonjour, c est travail magnefique, je te felicite.
t'as une idée comment je peux trouver un objet 3D dans une repertoire donnée similaire a un objet déja donnée.
en faite c un moteur de recherche 3d données= un objet 3D
resultat = les objet 3D similaire ds une repertoire donnée
Merci d'avance

Commentaire de Arnaud16022 le 08/05/2006 11:10:49

similaire, cad ? parfaitement équivalent ?
si oui, tu charges ton modèle, tu charges tous les autres et tu comprares tous les vertices entre eux.
si non , tu charges quand même, tu fais un rendu dans une texture, et tu dis à l'utilisateur, choisissez vous même la texture qui ressemble à ce que vous cherchez.

Si ça te va pas, doit y avoir de vrais algos, mais alors là, faut du level.

Commentaire de victorcoasne le 08/05/2006 11:22:35

Xyueohjqsdhbgj djh ehzgtz_i ? za zyur! zyui qtzèeha.

C'est ce que ça m'a fait l'effet quand j'ai lu vos commentaires (arnaud16022 et gadourpro) !

Sinon rei3 continue dans cette voie !

Bonne prog,
@++

Commentaire de gadourpro le 08/05/2006 15:23:50

en faite je ve un algorithme de comparaison des objets 3d.
merci.

Commentaire de rei3 le 09/05/2006 17:29:18

Merci pour vos commentaires ^^,
gadourpro -> quel sont tes critères pour dire que deux objet 3D sont identique?

Commentaire de dorralola le 29/04/2007 19:12:59

est ce que il y a des etape qu il faux suivre pour integerer des bib de sdk dans visuel c express
et merci  

Commentaire de Adeon le 28/07/2009 11:15:32

Salut !
Je vois que tu fais un DrawPrimitive pour l'herbe et un pour la terre.
n'y a t-il pas moyen, en remaniant un peu les SetTextureStageState de faire un blending astucieux des 3 textures du terrain ( herbre, densité de terre, terre ) ?
Merci

Commentaire de Adeon le 31/07/2009 11:56:27

je me répond a moi même apres qq recherches : La réponse est OUI tout est expliqué sur cette super page : http://www.jenkz.org/articles/terraintexture.htm

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

multi texturing [ par colonelfr ] Salut,Voila mon nouveau probleme :J'ai un terrain avec deux textures differentes (herbe clair et herbe foncé). Le mélange des deux n'est pas tres reus Création de terrain 3d [ par pitap0 ] BOnjour a toutes la communauté Voili je cherche des sites, infos traitants Directx 8.1 sous visual C++ (6) plus precisement sur la création de terrain serpent et mur . [ par ultima666 ] Bonjour je suis en train de faire un serpent.Mais voila G quelque problème je ne sais pas comment faire les mur( délémiter le terrain )genre un terrai Problème de déplacement de serpent [ par triso1007 ] Salut, j'essaie de programmer un serpent, c'est que le début et je ne comprends pas, si j'appuie sur la touche s ou d, le serpent se déplace normaleme Besoin d'Aide en C++/OpenGL pour RTS 3D [ par ionstorm356 ] Bonjour tout le monde, je cherche des programmeurs en C++ (API Windows sans MFC) et OpenGL, motiver pour participer à un VRAI projet de Real Time Stra Deplacement d'un personnage en OpenGL [ par Clercq ] Bonjour a tous,&nbsp;&nbsp;&nbsp;J'ai parcourus les sources de ce site mais je n'ai pas concretement trouv&#233; reponse a ma question, en fait j'ai c algo de colorisation [ par chucky_666 ] G une scene openGL comprenant un terrain 3D et je voudrais attribuer une couleur a mes triangles en fonctions de l'altitude Z de ceux-ci :Genre :&nbsp Multitexturing OpenGl [ par goutbouyo ] Salut,Je charge une map BSP dans un jeu fait en OpenGl.Il y a donc du multitexturing.Le&nbsp;probl&#232;me c'est quand j'affiche mes persos en MD2, j' opengl multitexturing [ par dletozeun ] bonjour, J'ai reussi a mettre en place le multitexturing avec opengl, j'obtiens un melange homogene entre&nbsp; textures sur un polygone mais le prob blending [ par erazor ] J'ai un petit probleme de transparence dans une appli que je suis en train de coder:j'affiche un objet opaque puis un curseur de souris transparentmon


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,390 sec (3)

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