#0 

27-10-2013 14:42:59

Boar
Petit nouveau
Date d'inscription: 02-10-2013
Messages: 9

Bonjour,

J'aurais aimé savoir s'il était possible d'appliquer une heightmap sur une sphère ? (Pour en faire une sorte de "planète")
Si oui, pourriez - vous me donner quelques indications ?
Ou peut - être y a-t-il une meilleure solution ?

D'avance, merci smile

Hors ligne


#1 

27-10-2013 20:33:32

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 907
Corrections: 2
Site web

quelque chose dans ce style ?
http://irrlicht.sourceforge.net/forum/v … mp;t=42722
http://proland.inrialpes.fr

sinon si tu veut le faire par toi même
tu crée une sphere et tu multiplie la distance
entre le centre et le polygonne n et le coef que tu a sur ta heightmap

le seul point compliquer c'est la correpondance entre les coordonées polaire et celle de ta heightmap
http://mathproofs.blogspot.fr/2005/07/m … phere.html

Hors ligne


#2 

27-10-2013 21:44:30

Boar
Petit nouveau
Date d'inscription: 02-10-2013
Messages: 9

Merci, c'est exactement le genre de chose que je veux faire ! smile

J'ai essayé d'utiliser son sceneNode, ça marche, seulement je n'ai pas vraiment l'impression qu'il prend en compte ma HeightMap et que cela ne me crée qu'une sphère toute ronde, sais-tu comment y remédier ? J'ai essayer de faire un ->setMaxHeight(2.0f) mais le compilateur me dit : " |122|error: 'class irr::scene::ISceneNode' has no member named 'setMaxHeight'| ", pourtant elle est bien là.

Est-ce qu'il y aurais moyen depuis ces fonctions d'atteindre une taille permettant de faire le même genre de décor que sur "Proland" ?  ( http://proland.inrialpes.fr )

Et si je pars de rien, comment puis je faire pour récupérer le coefficient de chaque point sur la Heightmap ? 
[Edit] Et comment puis-je parcourir chaque points de ma sphère, en récupérant ses coordonnées x y z ?

C'est la première fois que je me lance dans ce genre de chose ^^

Merci !

Dernière modification par Boar (27-10-2013 22:39:35)

Hors ligne


#3 

28-10-2013 00:23:16

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 907
Corrections: 2
Site web

tu doit stocker un CSphericalTerrain et non un ISceneNode pour pouvoire acceder au définition spécifique
sinon tu fait un cast

((CSphericalTerrain*)node)->setMaxHeight(2.0f);

malheureusement tu ne pourras surment pas atteindre le même niveaux que proland donne avec CSphericalTerrain,
proland utilise un quad-tree lod qui lui permet de supprimer les parti non visible du rendue,
et de modifier en temps réelle le niveaux de détail affin d'exclure un maximum de polygonne
mais respectant au maximum le relief suivant la distance

par contre rien ne tempeche d'utiliser proland au seins d'irrlicht si tu limitte ton application a opengl

pour ce qui est de la récuparation des données [x,y] de la heightmap regarde du coter ITexture
les deux fonctions lock/unlock sont présente  pour récupéré le pointeur vers le tableaux de la texture interne
le format d'access respect:

irr::u8 *buffer; // size texture->getPitch()
buffer = data[y*width+x*texture->getPitch()];
(si mais souvenir sont bon)

le nombre de composant de la texture correspond au nombre de valuer nécéssaire a la representation d'un texel
défini par ECOLOR_FORMAT

pour ce qui est des points de la sphere tu doit passer par IMesh
tu itères sur chaque IMeshBuffer qu'il contient
et tu passe par getVertex()
suivant getVertexType() la taille different et la donner sont differents
tu fait un bête cast comme mentionner dans la doc

Hors ligne


#4 

30-10-2013 19:17:13

Boar
Petit nouveau
Date d'inscription: 02-10-2013
Messages: 9

Je crois que ça s'annonce tout de même plus compliqué que ce à quoi je m'attendais ^^

N'y aurait-il pas une autre méthode ?
Crois - tu qu'il serait possible de mettre des heightmaps bout à bout, en changeant à chaque fois leur inclinaison ?
( Un peu comme une boule à facette → http://us.123rf.com/400wm/400/400/a41ca … enants.jpg )

- Cela me permettrait ainsi, peut-être, de choisir quelle map afficher en fonction de l'emplacement de la caméra ( ? )
- Où bien d'utiliser une fonction qui me permettrais de changer l'emplacement des vertex de la map, pour la faire tourner sur elle même ( un peu comme si on roulait une feuille de papier ) ?

Merci ! smile

Hors ligne


#5 

30-10-2013 21:34:17

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Le plus simple c'est d'avoir un logiciel de dessin 3D comme Blender. Tu créés une sphere normale et une sphere que tu déformes (avec l'outils "Brush" par exemple) pour donner du relief. Ensuite, avec le modificateur adéquat intégré au logiciel, tu créés la HeightMap. Mais il faut avoir un minimum de connaissances dans un logiciel de 3D. Il y a des tutos sur le net, c'est comme ça que j'ai créé mes normalsMaps sur 3ds max.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#6 

30-10-2013 21:58:44

Boar
Petit nouveau
Date d'inscription: 02-10-2013
Messages: 9

Pour ce qui est des logiciels 3D, il n'y à pas de problème.
Puis-je appliquer des normalsMaps sur une sphère ? ( avec Irrlicht ? )

Hors ligne


#7 

31-10-2013 08:32:49

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Dans l'enum irr::video::E_MATERIAL_TYPE, il y a EMT_NORMAL_MAP_SOLID qui te permet de spécifié l'utilisation des normals map.
Il y a aussi : EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR et EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA pour la transparence en plus.

Code c++ :


ImeshSceneNode* node = smgr->addMeshSceneNode("MySphere.3ds");
node->setMaterialType(EMT_NORMAL_MAP_SOLID );

node->setTexture(0, diffusemap);
node->setTexture(0, normalmap);



La normalmap et la height map sont toutes deux extractibles avec un logiciel mais la heightmap est plus légère ingame. Aprés tout dépends si tu préfères la qualité (normalsmap) ou la performance (heightmap). Pour un jeu débutant, je pense que tu devrais rester sur ta première idée avec la heightmap pour l'instant. Par contre, pour ta sphère, le mieux c'est d'utiliser un mesh dont tu déplieras toi-même UVW Map plutôt que d'utiliser le GeometryCreator d'Irrlicht car tu auras un meilleur contrôle du résultat.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1426 sujets
11116 messages
Dernier membre inscrit: Bidule
8 invités en ligne
Aucun membre connecté
RSS Feed