Page 1 sur 1

Map 3D sphere

Publié : 29 Sep 2016 11:43
par Warcza
Bonjour bonjour,

J'aurais besoin de conseil / d'aide par rapport à un système de map 3D en forme de sphere.
Si la map est en 3D et en sphère c'est du au fais que le joueur ce trouve sur une petite planète (logique :-D).
J'ai pas réussi à trouver des sujets avec ce genre de map 3D sphere sur d'autres forum, du coup je demande conseil ici :) .

Y a pas si longtemps j'ai du faire une map 2D, et j'ai voulue donc appliqué à peut près le même système pour placer le joueur sur la map.
A savoir :
Prendre la position du joueur sur la map.
Prendre la proportion entre la taille du monde et la taille de la map.
Appliquer la proportion avec la position du joueur pour le placer l'icone du joueur sur la map.

Dans mon cas je rencontre quelques problèmes comme: l'icône du joueur va beaucoup trop loin de la surface de la map.
Du coup, je voulais savoir si déjà, je devais persister avec cette méthode ? ou si y a plus simple / mieux ?

Re: Map 3D sphere

Publié : 29 Sep 2016 17:21
par Alesk
Ton explication n'est pas super claire... peux-tu reformuler ou illustrer avec quelques images stp ?

Re: Map 3D sphere

Publié : 29 Sep 2016 23:06
par ZJP
Alesk a écrit :Ton explication n'est pas super claire... peux-tu reformuler ou illustrer avec quelques images stp ?
Reporter la position d'un joueur évoluant dans une map "classique" sur une map 3D... j'imagine. :mrgreen:
Une sorte de XYZ vers Latitude/Longitude ou XYZ Plane vers XYZ Sphérique?!!!

Re: Map 3D sphere

Publié : 30 Sep 2016 09:34
par Warcza
En gros j'aimerais reporter le joueur qui est sur un monde en sphère, donc on peut faire le tour etc, sur une map 3D qui est également une sphère du coup et au quelle on lui rajoute une texture représentant le monde, pour faire la carte.

Pour l'instant niveau code j'ai fais ça :

Code : Tout sélectionner

// Ratio entre le diametre du monde et celle de la map
ratioMM = sphereRadius / Moon.GetComponent<MeshRenderer> ( ).bounds.extents.magnitude;

// Placer l'icone du joueur en fonction de ce ratio
Vector3 posPlayer = new Vector3 ( getThisPos.position.x * ratioMM, getThisPos.position.y * ratioMM, getThisPos.position.z * ratioMM );

//Si l'icone du joueur est à l'interieur de la map 
	Ray ray = new Ray ( posPlayer, thisSphereMap.localPosition );
	float distance;
	if ( CheckRaySphere ( ray, thisSphereMap.localPosition, sphereRadius, out distance ) )
	{
		Vector3 position = ray.GetPoint ( distance );
		Vector3 normal = ( position - thisSphereMap.localPosition ).normalized;
		Quaternion rotation = Quaternion.LookRotation ( normal );

		thisPlayer.localPosition = position;
		thisPlayer.localRotation = rotation ;
	}
Du coup j'ai actuellement 2 problèmes, de un je dois manuellement donner la valeur du diamètre de la map car sinon je n'arrive pas à placer le joueur sur la sphère, exemple :
Pour que le joueur soit sur la map il doit avoir au moins une valeur au alentour de 100 sur une des variables de position alors que si je prend le diamètre de la map, la position du joueur va être au alentour de 4-8 sur les 3 variable.

Pour la hiérarchie, j'ai un moonModel, c'est l'élément que je bouge pour faire bouger la map / joueur, etc. En dessous j'ai donc le joueur, la map (qui à un scale d'environ 200 si ça y a besoin de cette info) et de deux autres éléments qui sont d'autres éléments graphique pour la carte.

J'ai également une autre question, la map à également une rotation par défaut, que je ne peux pas remettre à 0 si ça casse avec les deux autres éléments pour la carte.
Du coup il faut que j'applique un déplacement de l'icone du joueur par rapport à cette rotation.
Je pense qu'il faut faire un truc du genre, mais je sais pas exactement ce que je doit mettre comme vector (up / right, etc) :

Code : Tout sélectionner

posPlayer = ( Quaternion.AngleAxis ( getRotate.x, Vector3.up) * Quaternion.AngleAxis ( getRotate.y, Vector3.right ) * Quaternion.AngleAxis ( getRotate.z, Vector3.forward ) ) * posPlayer;
Je précise juste que si je met la position de la map et que je n'applique pas ce morceau de code juste au dessus, l'icone du joueur est au bon endroit sur la map (mais lorsqu'il ce déplace en fonction d'ou il est sur la map, le mouvement est inversé du à la valeur de la rotation j'imagine).

En espérant que ça soit plus clair pour vous et non plus confus ;s

Re: Map 3D sphere

Publié : 30 Sep 2016 09:43
par boubouk50
Il vaut mieux partir sur des bases saines. Refais ton monde correctement, avec les bonnes échelles, sans rotation, et tu n'auras pas à galérer sur les transformations.
Oui, c'est relou, mais c'est un mal pour un bien, un mal nécessaire.
Après ça, peut-être que tes problèmes seront plus faciles à résoudre.

Re: Map 3D sphere

Publié : 30 Sep 2016 11:47
par Alesk
Nan, c'est toujours pas clair ...
Je ne vois pas où est la difficulté si le niveau réel et la minimap sont tous les deux des sphères ... Il y a forcément une subtilité en plus, c'est pourquoi une image serait fort utile pour mieux comprendre où ça coince.

Et +1 avec Boubouk