Je développe un jeu composé de 2 étapes, l'une d'entre elles a une projection orthographique et l'autre étape a une projection de perspective. p>
Actuellement, lorsque nous allons entre les modes, nous nous sommes faibles au noir, puis revenez en mode caméra. p>
Comment irai-je sur la transition sans heurts entre les deux? p>
3 Réponses :
Il y a probablement une poignée de façons d'accomplir cela, les deux que j'ai trouvés qui semblaient être comme ils travailleraient les meilleurs étaient: p>
lier tous les éléments matriciels d'une matrice à l'autre. Apparemment, cela fonctionne assez bien toutes les choses considérées. Je ne crois pas que cette transition apparaîtra linéaire, cependant. Vous pouvez essayer de lui donner une fonction d'assouplissement au lieu de faire l'interpolation linéairement p> li>
a Dolly Zoom sur la matrice de perspective allant / à partir d'un champ de vision près de 0. Vous alliez appartenir à la matrice orthographique à la matrice de la perspective de près de 0 et lerp la FOV sur votre cible, et probablement de peaufiner les avions proches / éloignés que vous allez. En sens inverse, vous seriez lerp à 0 puis sur la matrice orthographique. L'idée derrière cet étant que les choses semblent plus flattées avec une FOV inférieure et qu'un fov de 0 est essentiellement une projection orthographique. Ceci est plus complexe mais peut également être ajusté beaucoup plus. P> li> ol>
Grand merci! J'avais pensé au zoom de Dolly, mais je n'avais pas pensé à "reproduire" la vue orthographique dans une vue en perspective avec 0 champ de vision. Tellement théoriquement, tout ce que je devais faire est de modifier la position de la caméra avec un champ de vision de 0 pour recréer la scène orthographique, puis interpolez-vous le champ de la vue et la position de la caméra?
Théoriquement, oui. Beaucoup de résultats ont abouti à des trucs spécifiques à l'unité, mais la théorie / les mathématiques sont les mêmes - réponses.unity3d.com/questions/58306/...
J'ai réussi à faire cela sans l'utilisation explicite des matrices. J'ai utilisé Java afin que la syntaxe soit différente mais comparable. Une des choses que j'ai utilisées était cette fonction mix (). Il renvoie Lorsque j'appelle cette fonction, j'utilise la valeur1 pour la perspective et la valeur2 pour orthographique, comme: Lors de la détermination de votre longueur focale et de votre facteur de zoom orthographique, il est utile de savoir que quelque chose à distance J'espère que cela aide. Vous pouvez télécharger mon programme pour voir comment il regarde https://github.com/npetrangelo/3rd -Dimension / libération . P> p> value1 code> lorsque
facteur code> est 1 et
value2 code> lorsque
facteur code> est 0 et a une transition linéaire pour chaque valeur Entre.
Mix (longueur focale / voxel.z, Orthozoom, facteur) code> p>
FOCALLLENDENDREND / ORTHOZOOM ORTHOZOOM ELIME DE LA CAMÉRARE PROJECT AU MÊME POINT PARFAIRE Transition. P>
Si vous avez accès à un pipeline programmable (A.K.A. Shaders), vous pouvez effectuer la transition dans le Shader Vertex. J'ai constaté que cela fonctionne très bien et n'introduit pas des artefacts. Voici un extrait de code GLSL: dans le code, 'Unarclipplanplane' est la distance à proximité de l'avion, qui est la valeur que vous avez utilisée pour créer la matrice de projection de la perspective. P> Lorsque vous convertissez ceci en HLSL, vous devrez peut-être utiliser J'espère que vous trouverez cela utile. p> EDIT: Au lieu de passer dans la distance de l'avion à proximité, vous pouvez également l'extraire de la matrice de projection. Pour OpenGL, voici comment: p> EDIT 2: Vous pouvez optimiser le code en faisant la mise à l'échelle sur X et Y en même temps: P> upersptoortho code> est un
Vec2 code> (par exemple, un
flotteur2 code> ) qui contient une valeur dans la plage [0..1]. Lorsque vous êtes réglé sur 0, vos coordonnées utiliseront la projection de la perspective (en supposant que votre matrice de projection est une perspective). Lorsque vous êtes défini sur 1, vos coordonnées se comporteront comme si projetées par une matrice de projection orthographique. Vous pouvez le faire séparément pour les axes X et Y. p>
Voir.Z code> au lieu de
-View.z code>, mais je pourrais avoir tort. p>
uniform float uInvNearClipPlane; // = 1.0 / zNear
Je devine juste, mais si
p1 (x) code> est les coordonnées dans une projection et
p2 (x) code> dans l'autre, vous pouvez obtenir une transition en douceur
F P1 (x) + (1-F) P2 (x) code> en modifiant sans heurts F de 0 à 1
Cette question est intéressante et claire, mais comme écrit, cela vous permet de dire que vous demandez à quelqu'un de faire le travail pour vous. Vous devez ajouter plus de détails, comme la matrice pour l'ortho et la matrice de la transformation en perspective, etc. Comme l'autre commentaire mentionne, si votre projection d'ortho est une matrice 4x4 et la matrice de perspective est également, vous pouvez essayer une combinaison linéaire de les deux.