begin process at 2012 05 27 16:34:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > GÉNÉRATEUR DE LIGHTMAPS À PARTIR D'UNE HEIGHTMAP

GÉNÉRATEUR DE LIGHTMAPS À PARTIR D'UNE HEIGHTMAP


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :lightmap, gtk, heightmap Niveau :Initié Date de création :01/09/2006 Vu / téléchargé :5 972 / 290

Auteur : Funto66

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

 Description

Cliquez pour voir la capture en taille normale
Ça faisait longtemps que je ne postais pas tiens !

Ce code est, comme le titre l'indique, un générateur de lightmaps, c'est à dire : on lui fournit une heightmap (une image en niveaux de gris définissant des hauteurs : plus c'est blanc, plus le point est haut, Cf la leçon 34 de NeHe ici : http://nehe.gamedev.net/data/lessons/lesson.asp?le sson=34 ou même une autre de mes sources lol), et il génère une lightmap, c'est à dire une image, toujours en niveaux de gris, définissant les ombres à appliquer au terrain : on plaque cette texture sur tout le terrain et ça correspond aux ombres que font les reliefs.

Pour fonctionner, ce programme opère donc par lancers de rayons : il part d'une image totalement sombre (à vous de définir le niveau de "sombre" dans l'utilisation du prog) et envoie des rayons suivant un certain angle et de la gauche vers la droite. A vous aussi lors de l'utilisation du programme de spécifier l'angle et la hauteur à partir de laquelle part le dernier rayon (depuis la gauche).

Bon ben globalement c'est tout...le programme enregistre au format PNG mais peut ouvrir dans plusieurs autres formats (merci Gdk-Pixbuf :)).

Je n'ai pas testé le programme sous Windows mais je pense qu'il doit fonctionner.

Pour le compiler, il vous faudra la librairie GTK+ dans sa version 2, récupérable sur http://gtk.alkia.org/index.php pour les utilisateurs de Code::Blocks ou Dev-C++.

Si vraiment vous voulez une version précompilée pour Windows, faites-le moi savoir...


 Conclusion

Si ce programme vous est utile, un p'tit commentaire serait le bienvenu :) (même s'il ne vous est pas utile hein :p).

 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 CHARGER UNE DLL DYNAMIQUEMENT (PORTABLE)
Source avec Zip Source avec une capture [OPENGL] LOADER XPM: TEXTURES DANS L'EXE
Source avec Zip Source avec une capture LECTEUR VIDEO OPENGL
Source avec Zip Source avec une capture HEIGHTMAP OPENGL
Source avec Zip Source avec une capture ALPHA EDIT 3.5 (OUTIL POUR OPENGL)

 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

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture INFORMATION GTK CONCERNANT UNE TOUCHE par Phelim
Source avec Zip ALGORITHME ACO INTERFACE GTK par RyBeN
Source avec Zip Source avec une capture JEU PUISSANCE 4 EN C AVEC GTK par msaidara
Source avec une capture TRANSFERT DE FICHIER TCP [GCC - GTK] par ganjarasta
Source avec Zip GTK _CALCUL par jabirmed

Commentaires et avis

Commentaire de luhtor le 01/09/2006 20:35:17

Quand tu fais un lancé de rayon, tu lances plein de rayon aléatoirement ? je pensais qu'on partait de chaque point de la heightmap et qu'on se déplacait ensuite dans la direction de l'éclairage et si on rencontre un obstacle, alors le vertex est dans l'ombre.

Sinon, t'as pas prévu de truc pour pouvoir charger une heightmap 16 bits ou plus ? Car avec la faible résolution, on voit des artefacts apparaitrent sur la lightmap de ta screen.

Commentaire de Funto66 le 01/09/2006 20:40:53

tu veux dire quoi par heightmap 16 bits?

Et pour le système en fait non je ne pars pas de la heightmap (en fait t'as raison j'aurais dû...tant pis ^^ Quoi que je peux encore le faire après tout...), je pars d'une espèce de mur vertical situé à gauche, et je lance tous les rayons en direction de la heightmap avec l'angle donné.

A la base tout est sombre, si le rayon arrive sur un pixel, celui-ci devient blanc.

('tain c clair que j'aurais dû partir de la heightmap...pff...)

Commentaire de luhtor le 01/09/2006 23:25:17

lool :) oue partir de la heightmap, ca me parait plus logique en soi.

Sinon pour une heightmap 16 bit ou plus, je parlais du codage des données. Comme je ne peux que regarder le code, j'ai du mal a voir ce qui se passe. Mais l'altitude tu l'extrais a partir d'une composante de couleur codé sur 8 bits non ? Or c'est fréquent (voir systématique) d'utiliser des heightmaps codés sur 16 ou 32 bits pour avoir une meilleur précision sur la hauteur.

Commentaire de Funto66 le 02/09/2006 11:50:15

Ok je vois ^^
Euh non en effet comme tu le dis la composante est codée sur 8 bits...

J'ai fait ce prog pour un autre projet que j'ai en cours et qui utilise le moteur 3D OGRE, et la heightmap qu'ils fournissent (image PNG) n'utilise que 8 bits...
Pour utiliser ces 16 ou 32 bits, on utilise le plus souvent les différents canaux rouge/vert/bleu ou un format de heightmap spécial? (ou du OpenEXR?)

Commentaire de luhtor le 02/09/2006 12:40:01

Pour le moment, j'enregistre mes floatant bout a bout :) Evidemment c'est illisible sur un logiciel de dessin, mais ca reste une heightmap.

Commentaire de Funto66 le 02/09/2006 13:42:35

Ok je vois, ton propre format quoi :)
J'avais fait mon propre format aussi, d'ailleurs c'est dans mes sources :p Avec compression RLE, mais si ton truc c'est avec des flottants ça doit pas être possible ^^

Sinon peut-être qu'avec le OpenEXR y'a possibilité d'avoir une + grande résolution...

Commentaire de Kirua le 02/09/2006 18:35:59

Intéressant. Mais tu pourrais pas détailler l'algo?

Bon, déjà, c'est clair qu'il fallait partir des pixels :D C'est comme ça que ça marche pour les raytracers aussi, sinon je vois pas comment on peut faire autrement ^^ (d'ailleurs c'est un peu un raytracer en fait). Mais plus techniquement, tu calcules tous les triangles du relief et tu testes les collisions avec un rayon de lumière? T'utilises des octrees alors? Et tu calcules les normales des triangles pour le degré d'éclairage ou pas?

En fait, je vois quand même pas trop trop comment tu associes un pixel à un triangle ... un pixel c'est plus un sommet de trois triangles voisins (ou plus? je sais pas trop comme ça sans réfléchir). Faut moyenniser les vecteurs normaux alors?

Enfin, détaille quoi ;)

Commentaire de Funto66 le 03/09/2006 12:21:27

Non non pas d'association entre un pixel et un triangle, comme tu dis, dans une heightmap un pixel serait plutôt un sommet, qui serait commun à 4 triangles voisins.

En nommant axe des X l'axe qui va de gauche à droite de l'image, axe des Y celui qui va de haut en bas et axe des Z celui qui va du "haut" (pixel blanc) au "bas" (pixel noir), l'algo donne ça :
On part d'une image entièrement sombre.

Pour chaque ligne horizontale (i.e. on parcourt en Y)

  Pour chaque altitude de départ (i.e. en Z, ce que j'appelle z_origine dans mon code)
  (tous les rayons partent du côté gauche de l'image avec une altitude croissante)

    Tant que le point en bout de rayon (nommons-le P)n'a pas dépassé la largeur
    de l'image (axe des X)
      Si jamais P est à la hauteur de ou en dessous du point de l'image survolé
      (en même position pour X et Y) alors ce point devient blanc et on passe au rayon suivant.
      Fin Si

      On incrémente la position du point en bout de rayon en X avec un pas de 1
      (i.e. on passe au pixel suivant) et
      on décrémente sa position en Z (i.e. il descend en avançant)


    Fin Tant que

  Fin Pour

Fin Pour

Voilà, donc en gros on peut imaginer ça comme un rayon fait de petits cubes qui évolurait au-dessus d'un voxel, fait de petits cubes...
En illustration ça donnerait ça : http://perso.orange.fr/funto/explication.jpg (représentant une "tranche" horizontale de l'image).

Bon là je pense avoir été assez clair? ^^

Commentaire de Kirua le 03/09/2006 13:53:48

Super le dessin, très clair là :). Merci :).

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Ajouter une nouvelle rubrique pour le GTK+ [ par krtman ] Je compte poster d'autres sources en C utilisant le toolkit GTK+ pour creer une interface. Ca serait bien de creer une nouvelle rubrique. Pour suivant heu...C koi gtk+ ??? [ par BlackWizzard ] je commence seulement à develloper vraiment en C++, j'ai les bases mais C koi gtk+?à koi ça sert?possible avec VB++6? les acces aux données en gtk+ [ par ahmed ] comment se fait l'acces aux bases de donneés en gtk+...est ce qu'il y a un widget qui est responsable de l'access aux bases de données ? Probleme GTK [ par Jo ] Salut,Quelqu'un pourrait me dire ou est l'erreur ?char * fichier; char *z;gchar *temp;temp = gtk_entry_get_text(GTK_ENTRY(Data));fd1= fopen((char *)te Gtk avec gcc [ par GoldenEye ] Bonjour à tous.Je suis en trian de passer de VC++ à gccSi qqun pouvait m'indiquer un site de documentation sur la librairie graphique gtk, ce serait t demande librairie gtk pour win32 [ par francky ] quelqu'un pourrait-il me donner la librairie gtk.h?ou alors des liens vers des exemples d'interface graphique réaliséemerci d'avance. gtk & win32 & Visual C++ [ par Paisible ] je vais peut être me faire jeter, mais bon...j'ai cherché dans le forum... et impossible de trouver la trace d'un quelconque post concernant la config Comment compiler avec GTK (sous linux) [ par defcon ] Bonjour à touse, voilà, je voulais savoir comment compiler mon code source souis linux (avec librairie GTK)???Merci d'avance pour votre réponse.Amical Comment compiler GTK (sous linux)??? [ par defcon ] Bonjour à touse, voilà, je voulais savoir comment compiler mon code source souis linux (avec librairie GTK)???Merci d'avance pour votre réponse.Amical Accent et GTK !! [ par UncleShu ] Je n'arrive pas à faire des accents avec GTK sur linux (ex. é,è,...) , ca me coupe la lettre accentuée et les autres lettres suivantes !!!J'ai essayer


Nos sponsors


Sondage...

Comparez les prix

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

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