# Environnements de dveloppement > Delphi > Codes sources  tlcharger >  [FMX 3D] Gnration d'un cubemap

## gbegreg

Bonjour,

Toujours dans le domaine de la 3D "rcrative", je vous propose cette fois ci un composant permettant de gnrer un cubemap. Un cubemap est tout simplement un cube qui va dlimiter note scne 3D.
Pour ce faire, nous devons gnrer un cube suffisamment grand et texturer chacune de ses 6 faces de sorte que l'utilisateur qui sera plac  l'intrieur ait l'impression d'tre plong dans le dcor qu'on lui propose.

Voici la texture (ici en mode dgrad) qui nous servira pour l'exemple :


Il s'agit d'une image compose de 12 vignettes (4 vignettes par ligne sur 3 lignes). Les parties en noir ne seront pas utilises. Il reste donc bien les 6 vignettes qui seront appliques aux 6 faces de notre cube.

Vous aurez certainement remarqu que par dfaut, lorsqu'on applique une texture  un TCube, l'image s'applique entirement sur chacune des faces du cube. Ce n'est pas ce qu'on souhaite ici. Je vais utiliser la mme mthode que celle utilise dans cette discussion   savoir les proprits "texte" Data.Points, Data.TexCoordinates et Data.TriangleIndices du TMesh.

Par rapport  la prcdente discussion sur l'herbe, ce qui est intressant dans cet exemple c'est la manire d'appliquer la texture (donc l'utilisation de Data.TexCoordinates).

Pour dfinir un cube, il nous faut dfinir 8 sommets. Le problme est que nous ne pouvons affecter  un sommet qu'une seule coordonne de la texture. Il va falloir dupliquer des sommets pour pouvoir appliquer la texture comme on le souhaite. Dans mon exemple, il me faut 18 sommets.
Voici un petit schma pour tenter d'expliquer rapidement :


Dans ce schma, on voit en noir les indices des 8 sommets du cube avec en gris leurs coordonnes. Le centre du cube est  la position x=0, y=0 et z=0.
J'ai mis en rouge les sommets "dupliqus" ncessaires  l'application de la texture. En regardant la texture, on constate que la seconde ligne de vignettes sera applique sur les 4 faces de "cts". Il faut bien 10 points de "pliage" pour adapter cette image aux faces du cube : les deux points haut et bas  droite de cette ligne de vignettes doivent rejoindre les deux points haut et bas de gauche.

Les faces du dessus et du dessous ncessitent chacune 4 autres points car on est sur la premire et la troisime ligne de vignettes.

L'application de la texture se fait grce au code :


```

```

Pour chaque sommet de notre TMesh (notre cube  18 sommets :;): ) nous indiquons les coordonnes de la texture  appliquer en pourcentage.

Le projet exemple reprend les principes d'orientation que j'avais dtaills dans l'pisode 2 du tutoriel FMX Island. Vous devrez faire un clic gauche, maintenir le bouton de la souris enfonc et dplacer la souris pour modifier la direction du point de vue.

Voici le zip contenant le composant TGBECubemap et le projet exemple :
Cubemap_src.zip

Et une capture d'cran :

----------


## SergioMaster

Bonjour,

Superbe mais je ne mordrai pas  l'hameon, je reste pour l'instant  la 2D

----------


## Cirec

Bonjour,

le rsultat est assez bluffant surtout compte tenu du nombre de ligne de code  ::D: 
on se rend compte qu'on est dans un cube que en regardant en bas ou en haut.
Encore une belle dmo, bravo et merci pour le partage  :;): 




> Superbe mais je ne mordrai pas  l'hameon, je reste pour l'instant  la 2D


Moi je serai bien tent mais a reste un gros morceau  affronter quand on a jamais pratiqu la 3D.
et je me doute qu'une fois mis le doigt dans l'engrenage cette "dcouverte" devienne trs vite chronophage 
et du temps on en manque tous ou presque  ::aie:: 

Cordialement,
@+

----------


## Galet

Merci pour la magnifique dmonstration...
compte tenu de l'heure de publication, tu as mis un soleil artificiel sur ton cube  ::mouarf::  ?

----------


## gbegreg

> compte tenu de l'heure de publication, tu as mis un soleil artificiel sur ton cube  ?


J'ai du mal  trouver le sommeil lorsqu'il fait chaud  ::): 
J'ai surtout rencontr des difficults hier soir pour uploader les images et le fichier zip : j'ai pass prs d'une heure trente pour crer le post...

Vous pouvez trouver d'autres images sur Internet de cubemap. J'ai consult ce site qui est trs intressant et qui propose 2 images en rsolution assez leve qui fonctionnent plutt bien dans le petit programme d'exemple (surtout l'image avec la voiture : les raccords sont moins visibles, l'image du canyon est impressionnante mais les raccords se voient plus...).

----------


## Paul TOTH

question d'un vieux dveloppeur habitu  compter ses bits, pourquoi faire une texture de 3 x 4 partiellement utilise au lieu d'une texture de 3x2 totalement utilise ?!

----------


## gbegreg

> question d'un vieux dveloppeur habitu  compter ses bits, pourquoi faire une texture de 3 x 4 partiellement utilise au lieu d'une texture de 3x2 totalement utilise ?!


Les zones non utilises sont d'une couleur unie/ou transparente : les formats compresss jpg ou png font que ces images ne sont gure plus lourdes que la mme image en 3x2 totalement utilise. Un avantage (tout personnel) dans cette image en 4x3, c'est lorsqu'on la visualise dans un logiciel : on se rend assez facilement compte du rendu final.

Rien n'empche d'ailleurs de faire une image en 3x2 vignettes voir 1x6. Dans ces cas, il faudra bien sur revoir la manire d'appliquer la texture en consquence via self.Data.TexCoordinates.

Enfin, en cherchant des images "cubemap" dans Google, on tombe souvent sur des images en 4x3 comme celle fournie avec la dmo.

----------


## Paul TOTH

mon interrogation ne portait pas sur la taille du fichier disque, mais sur la taille de la texture en mmoire vido, l o elle est dcompresse  ::):

----------

