Je pensais donc à créer un jeu 2D où vous pouvez également vous déplacer le long de l'axe Z, en changeant dans quelle couche vous vous trouvez. En fonction de la profondeur, je souhaite mettre à l'échelle mes sprites 2D.
Une fois, quelqu'un m'avait montré une démo dans laquelle il avait beaucoup de sprites 2D, et en faisant défiler, il pouvait changer la profondeur de la caméra. Ainsi, lors d'un zoom avant, les objets se rapprochent du joueur et apparaissent plus gros. Ensuite, je me suis demandé combien un objet devrait être plus gros lorsqu'il se rapproche d'une unité. Comment calculeriez-vous cela? Alors le gars m'a dit: Il y a une règle de base que j'utilise: "les objets deux fois plus proches, apparaissent deux fois plus gros."
Maintenant, en le testant moi-même, je sais que la règle ne s'applique pas dans le monde réel;) Mais y a-t-il une constante qui est utilisée dans les calculs du monde réel pour la perspective ou quelque chose? Ou une formule?
Je sais que ce n'est peut-être pas le meilleur endroit pour poser une telle question, mais comme c'est le seul site que j'utilise pour les questions liées au jeu, et que mon contexte est un jeu, j'ai pensé essayer. De plus, je m'attends à ce qu'il y ait cette personne ici qui sait tout sur les perspectives et les matrices 3D ou quelque chose, car cela pourrait être lié aux jeux 3D;)
tl; dr:
"un objet deux fois plus proche, apparaît deux fois plus grand" Ce n'est pas vrai dans le monde réel. Mais quelle constante ou formule est correcte?
la source
Réponses:
En général, cela est vrai, en fonction de votre point de vue et de la direction dans laquelle il s'est déplacé, ainsi que de l'angle de vue.
Notez comment dans la première vue de la caméra, comme le bloc rouge est perpendiculaire à la vue de la caméra, l'objet semble être deux fois plus grand dans un rapport parfait de 1: 2 (notez la flèche pointant qu'il touche le bord de la vue après avoir été déplacé deux fois plus près)
Le second est le bloc de même taille tourné à 45 degrés. Au fur et à mesure de sa rotation, le bord inférieur n'est plus à la même distance de l'appareil photo que le bord supérieur, il ne semble donc PAS être mis à l'échelle correctement à un rapport 1: 2 mais en réalité il est deux fois plus grand (comme il l'est à le même angle sur le bloc bleu le plus éloigné que dans le bloc bleu proche.)
En conclusion, cela signifie en fait que votre ami avait raison et un rapport de 1: 1 ("les objets deux fois plus proches, apparaissent deux fois plus gros.") Pour vos objets est un bon choix.
la source
Un objet deux fois plus proche apparaît deux fois plus gros. C'est une conséquence du théorème de Thales et c'est vrai dans le monde réel.
On pourrait soutenir que le théorème de Thales est l'outil mathématique de base derrière la projection en perspective et ce qui est connu dans le pipeline graphique (OpenGL ou DirectX) sous le nom de division en perspective . C'est un théorème que vous devez absolument connaître et apprendre à reconnaître quand il peut être utilisé.
la source
En fait, c'est à peu près vrai (si vous déplacez un objet deux fois plus loin, il semble moitié moins grand), mais cela obscurcit la façon dont la taille visuelle des objets devrait changer lorsque les spectateurs se déplacent. Plus précisément, les objets semblent grossir plus rapidement lorsqu'ils sont proches. En effet, le spectateur parcourt la moitié de la distance beaucoup plus rapidement lorsque l'objet est proche, par rapport à lorsque l'objet est plus éloigné. Ou pour le dire autrement, alors que la vitesse du spectateur est constante, la valeur de "la moitié de la distance" change à mesure que la distance à l'objet change.
la source
Étant donné que vous ne travaillez pas réellement dans l'espace 3D, nous pouvons supposer que les sprites ne tournent jamais (la rotation peut être simulée avec une inclinaison, etc.) de la caméra.
Tout d'abord, vous devez comprendre comment les objets 3D sont rendus. Même si une caméra converge vers un seul point, il existe un plan invisible qui agit comme un écran sur lequel dessiner les objets. La seule chose que vous devez savoir sur l'écran est sa distance par rapport à l'appareil photo.
Voici un diagramme de la façon dont un objet est rendu à un appareil photo à deux distances différentes.
Comme vous vous en doutez, la hauteur de l'objet dépend de la distance de la caméra. MAIS puisque le rendu se produit sur le plan de réforme proche, nous devons calculer la hauteur du sprite à ce point.
Certains calculs de trig de base vous mèneront à la formule suivante:
EXEMPLE:
Je suggérerais de commencer par
v=5
, puis d'ajuster à partir de là en fonction de son apparence. Je peux lancer un violon ensemble qui vous permet de voir les changements en temps réel.TL; DR
EDIT: Lorsque vous dites se déplacer le long de l'axe z, je suppose que vous voudrez une vue en perspective (comme la plupart des jeux 3D; tireurs, etc.) Le calcul pour calculer la taille de l'objet en fonction de la distance dépendra également de l'emplacement dans le cadre, semblable à la vision périphérique. Au lieu de cela, je l'essayerais avec mes mathématiques qui sont une vue orthographique (pensez à Mario, Angry Birds, Super Smash Bros, etc.). Je ne connais pas l'apparence que vous essayez d'atteindre, mais tant que cela semble réel, les joueurs ne le sauront jamais!
DEMO!
la source
Cela n'a pas été couvert et j'ai pensé que cela pourrait être bénéfique: il convient de noter que lorsque vous divisez la moitié de la distance, doubler la taille dans les dimensions X et Y quadruplera la surface totale du sprite. Ceci est dû au fait:
Après avoir zoomé:
Cela peut vous donner l'impression que l'effet de zoom se produit rapidement ou est trop intense. Vous pouvez ajuster le facteur en remplaçant 2 dans la formule ci-dessus par une valeur flottante comme 1,5 ou 1,33 à la place.
Alternativement, ce que j'ai fait est de stocker la profondeur de la caméra (distance) à vos tuiles dans une valeur d'octet avec la traduction de la caméra (X et Y) puis de calculer la taille de tuile projetée ainsi:
Notez que cela
CameraZ
doit être strictement compris entre 1 et 255 et que cette restriction peut être un avantage ou un fléau pour vous à l'avenir.la source