Dans mon projet (C++/UE4), une maille à levier dépasse du sol. Maintenir le bouton gauche de la souris sur ce levier et déplacer la souris lance une opération de glissement. Cette opération de glissement est responsable du calcul des mouvements de la souris delta 2D et de l'utilisation de ces données pour faire tourner le levier * dans l'espace local *, qui ne peut tourner que sur un seul axe (négatif ou positif, mais toujours un seul axe). Mais que se passe-t-il si, au lieu d'être devant le levier, je suis derrière? Que faire si je suis sur l'un de ses côtés? Que faire si le levier dépasse d'un mur plutôt que le sol? ... Comment faire pour que les mouvements de la souris permettent de faire pivoter le levier en fonction de l'angle de vue, quelle que soit l'orientation du levier?Glissement d'un levier 3D (en fonction de l'orientation et de l'angle de vue)
Pour m'expliquer davantage ...
Voici une liste des scénarios, et comment j'aimerais la souris pour les contrôler:
Lorsque le levier est sur le sol et vous êtes en face de celui-ci:
- Si vous déplacez le souris UP (-Y), il doit tourner loin de la caméra
- Si vous déplacez la souris vers le bas (+ Y), il doit tourner vers la caméra
Lorsque le levier de sur le sol et vous êtes SILLAGE:
- Si vous bougez la souris (-Y), il devrait tourner de la caméra
(ce qui est le sens opposé de l'espace mondial quand vous êtes devant) - Si vous déplacez la souris vers le bas (+ Y), il doit tourner vers la caméra
(ce qui est le sens opposé de l'espace mondial quand vous êtes en face de celui-ci)
Lorsque le levier est sur le sol et vous êtes à côté:
- Si vous déplacez la gauche de la souris (-X), il devrait tourner à gauche de la caméra
(ce qui est le sens opposé lorsque vous êtes de l'autre côté de celui-ci) - Si déplaçant le DROIT de la souris (+ X), il doit tourner à droite de l'appareil photo
(qui est la direction opposée lorsque vous êtes sur l'autre côté de celui-ci)
lorsque le levier est sur un MUR et vous êtes en avant:
- Si vous déplacez la souris, il devrait tourner vers le haut (vers le ciel)
- Si vous déplacez la souris vers le bas, il devrait pivoter vers le bas (vers le sol)
Lorsque la levier est sur le mur et vous êtes à côté:
- même que quand il est sur le mur et vous êtes en face de celui-ci
S'IL VOUS PLAÎT NOTE si elle aide à tous, que UE4 n'intégré des fonctions mathématiques vecteur 2D/3D, ainsi que des moyens faciles de projet et deproject coordonne depuis/vers le monde en 3D ou un écran 2D. Pour cette raison, je connais toujours les coordonnées spatiales et spatiales exactes de l'emplacement de la souris, l'emplacement du pivot (de base) du levier et l'emplacement du levier (en haut), ainsi que la quantité (delta) de la souris a déplacé chaque image.
J'ai mis à jour ma question pour être plus approfondie sur les différents types de scénarios que j'ai en tête. L'un ou l'autre de vos algorithmes suggérés fonctionnera-t-il pour tous les cas répertoriés? Merci! – RectangleEquals
@RectangleEquals Les deux algorithmes fonctionnent dans tous les cas, y compris la plupart des angles pour la caméra et le levier (par exemple, levier sur une pente). Le cas étrange est quand le levier est sur le sol devant vous et il est censé s'en aller et vers la caméra. La méthode de l'espace de l'écran vous déplacez la souris vers la gauche et le levier s'éloigne de vous. La méthode de l'espace du monde vous déplacez la souris vers le bas et le levier peut revenir en avant en fonction de votre alignement exact. Les deux sont un peu étranges du point de vue du contrôle, mais sans une souris que vous pouvez pousser dans la table, ce ne sera pas une solution facile. – Sorin
@RectangleEquals Je vous suggère d'essayer d'abord ces méthodes et de vous faire une idée des mathématiques. Une fois que vous êtes à l'aise avec cela, vous pouvez essayer des mappages différents, ou une combinaison de solutions, en fonction de votre position relative par rapport au levier. Vous pouvez également trouver que certaines méthodes sont plus intuitives dans votre contexte, même si elles ne sont pas parfaites pour le contrôle. – Sorin