Il y a très peu de différence en utilisant la matrice orthogonale ou tronquée de sorte que le la réponse la plus simple serait simplement d'échanger les paramètres bottom
et top
ou même les définir à tout ce dont vous avez besoin.
Mais pour examiner un peu plus frustum:
Qu'est-ce que cette méthode fait est qu'il crée une matrice qui échelle les objets en fonction de la distance de near
. Il est conçu pour qu'un objet au near
soit mis à l'échelle par 1.0
. Ainsi, par exemple, si vous mettez un rectangle avec des coordonnées left
, right
, top
, bottom
comme x
et y
puis near
comme z
et en utilisant aucune autre matrice, mais le résultat sera le tronc de cône exactement un rectangle plein écran.
Les objets qui sont plus proches de near
ne seront généralement pas dessinés et ceux qui seront plus loin seront linéairement échelonnés en fonction de tous les paramètres, mais far
. Le paramètre far
n'affecte rien sauf l'endroit où vos objets cesseront d'être dessinés. Donc, dans la plupart des cas, il n'y a pas de différence si vous mettez une très grande valeur far
mais une très importante; L'effet d'avoir une grande valeur far
sera le test de précision de profondeur. Donc, lorsque vous utilisez le tampon de profondeur, assurez-vous que cette valeur est aussi petite que possible mais suffisamment grande pour voir tous vos objets.
Dans la plupart des cas, nous définissons le tronc de cône avec un angle de vue. Vous définissez la constante near
, far
et fov
à partir de laquelle les paramètres de bordure sont ensuite calculés comme right = tan(fov)*near*0.5
et top = tan(fov)*near*0.5*(viewHeight/viewWidth)
. Ce ne sont là que quelques exemples car il y a plusieurs façons de le définir.
Dans votre cas, il n'y a aucune raison de ne pas définir ces valeurs à votre guise. Donc ayant quelque chose comme left = 0.0
, right = width
, bottom = height
et top = 0.0
. Mais alors vous avez encore besoin de définir des valeurs proches et lointaines qui doivent être positives. Ensuite, si vos objets sont à une distance de 0.0, ils seront tous coupés.
Pour éviter cela, il est préférable d'utiliser une procédure lookAt
qui générera une autre matrice pouvant définir la position "caméra" dans votre scène. En le mettant simplement à z=-near
, vous devriez voir les objets exactement comme avec la projection orthographique. Le problème est maintenant que si vous voulez "zoomer" en rapprochant l'appareil des objets, ces objets ne seront plus dessinés.
Pour réaliser quelque chose comme ça, vous devez définir une échelle maximale, par exemple maxZoom = 10.0
. Ce que vous feriez alors est de diviser tous les paramètres de frontière (top
, left
...) avec cette valeur. Vous devez également appliquer cette échelle à la valeur z
dans votre matrice lookAt
pour voir que la scène n'a pas été agrandie.
Donc, en général pour retourner les coordonnées, vous pouvez modifier les valeurs de bordure ou vous pouvez jouer avec regarder la matrice.Il y a aussi d'autres moyens, mais ils sont assez standards. J'espère que cela clarifie un certain nombre de choses pour vous.
Merci pour votre réponse longue et agréable - se penchera sur ce plus et peut l'accepter en temps voulu – java