Accueil / Blog / Métier / 2014 / Cartographie 3D : Position initiale d'une caméra en fonction de la topographie d'un terrain.

Cartographie 3D : Position initiale d'une caméra en fonction de la topographie d'un terrain.

Par Célian Garcia — publié 30/06/2014
Cet article explique comment on a initialisé la position de la caméra dans Geotrek 3D, en tenant compte de la topographie du Modèle Numérique de Terrain.
Cartographie 3D : Position initiale d'une caméra en fonction de la topographie d'un terrain.

Geotrek 3D

La position initiale de la caméra était jusque là statique, j'entends par là qu'elle était la même pour chaque profil topographique de terrain. Le problème avec cette configuration c'est que certains terrains possédent alors une orientation initiale qui leur est très défavorable :

geotrek3D 3D babylonjs

On ne voit rien et ce n'est pas très agréable de se faire tourner le dos dès le départ. Surtout que comme pour beaucoup de choses la première impression est très importante !

Il a donc bien fallu que la position initiale devienne dynamique. La question qui se pose alors, c'est comment déterminer la meilleure position initiale possible ? ou au moins comment éviter des choses comme ce qu'on vient de voir ?

Cet article montre une solution qui a plutôt bien marché dans notre cas.

J'ai appelé cette méthode la méthode des cases à indices.

L'idée principale ici est de séparer le terrain en un petit nombre de cases, et d'analyser les zones (ici appelées voisinages) qui possèdent les altitudes les plus basses. La caméra s'orientera ainsi directement sur ces zones et on ne se retrouvera pas devant un pic qui nous cache la vue.

Les cases

Tout d'abord on crée une grille de cases fictives au dessus du terrain comme ceci : 

geotrek3D camera 

A noter que j'ai choisi un nombre de 25 cases pour avoir des résultats assez précis, tout en conservant des zones de voisinage étendues (la notion de voisinage sera explicitée plus bas).

Les types de cases

Pour faciliter la différenciation entre les cases, chacune d'elles possède un type :

Les cases de coins sont les quatre cases qui forment les angles du terrain. 

Les cases de bordures externes sont les cases du bord extérieur.

Les cases de bordures internes sont les cases du bord intérieur.

Enfin, les cases internes sont les cases noires, elles n'ont ici aucune utilité.

 geotrek3D 3D babylonjs camera

Pour mieux comprendre, voici une visualisation en 3D de ces fameuses cases. Chaque case est représentée ici par une sphere. 

geotrek3D 3D babylonjs camera  

Le voisinage des cases 

La meilleure position sera déterminée en fonction du voisinage des cases du tour. En effet, seules les cases du tour sont prises en compte car c'est elles qui potentiellement nous gâchent la vue. D'après le schéma plus haut, les cases du tour sont :

  • les cases de coins qui ont un voisinage de ce type :

geotrek3D 3D babylonjs camera 

 

  • les cases de bordure externe qui ont un voisinage de ce type là : 

geotrek3D 3D babylonjs camera 

 

Les indices

Une fois ces cases créées on a besoin des altitudes. Pour simplifier les choses, j'ai groupé les altitudes par case et créé des indices de 0 à 10 (Avec 0 : altitudes très basses et 10 : altitudes très élevées).

C'est quand même plus facile de travailler avec des indices de 0 à 10 que de 1425,56 à 2232,124 !

Voici donc un exemple de ce que l'on peut obtenir :

geotrek3D 3D babylonjs camera 

Il nous faut maintenant trouver au milieu de tous ces chiffres la case alpha.

La case alpha

C'est la case qui déterminera la fameuse position initiale de la caméra. Elle possède les voisins qui ont les plus petits indices.

On parcourt donc chaque case du tour en additionnant les indices de tout son voisinage (la case courante est comprise dans le voisinage)

La case qui a le résultat le plus bas est la case alpha.

Exemple : On peut voir ici que le voisinage de la case que l'on teste a une valeur égale à 2+1+2+1+8+3 = 17, c'est le minimum de tous les voisinages.

La case testée a le voisinage le plus bas, c'est la case alpha.

 geotrek3D 3D babylonjs camera

Placement de la caméra

Maintenant que l'on a trouvé la case alpha, il ne reste plus qu'à positionner la caméra en fonction de cette case.

On connait la position O du centre, on connait la position A de la case alpha, et on cherche la position C de la caméra. Un peu de mathématiques et le tour est joué !

On choisit par exemple OC = OA*3/2, ou un autre rapport, tout dépend de la promiscuité désirée entre la caméra et le terrain.

geotrek3D 3D babylonjs camera

Il est vrai que plus le terrain est grand, plus la caméra sera loin de celui-ci. Mais plus il est grand, plus la caméra doit s'en éloigner pour le voir en entier !

Voici le résultat avec le même terrain qu'au tout début de l'article :

 geotrek3D 3D babylonjs camera

C'est quand même beaucoup plus appréciable ! Le terrain n'est pas caché et sauf si la randonnées est dans un trou au milieu d'une montagne, on aura toujours la meilleure vue initiale ou en tout cas quelque chose qui s'en rapproche.

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Elections.js génère des cartes pour vous Elections.js génère des cartes pour vous 30/03/2015

Le travail sur les cartes pour les élections départementales a débouché sur la création d'un ...

Geotrek - 1ère rencontre des utilisateurs 21/12/2016

La communauté Geotrek, regroupant environ 60 personnes, s'est retrouvée le 18 octobre 2016 à ...

Infrastructure webmapping minimaliste (partie 2) - TileMill Infrastructure webmapping minimaliste (partie 2) - TileMill 12/12/2013

Dans le cadre de notre architecture webmapping minimaliste, nous présentons quelques astuces pour ...

Geotrek, bilan de deux années pleine de nouveautés 23/09/2016

Nos retours sur cette année de travail avec la communauté

Importer une couche de tronçons dans Geotrek Importer une couche de tronçons dans Geotrek 08/09/2014

Un tutoriel pour charger des tronçons dans la base de données PostGIS de Geotrek avec QGIS