Salut.
Je possède une classe camera qui contient trois matrices :
-Avec la première matrice j'effectue une projection (orthographique ou bien perspective) mais je veux pouvoir aussi choisir l'unité et le sens des axes.
-Avec la second matrice j'oriente ma caméra pour qu'elle regarde vers un point fixe.
-Et la troisième matrice me permet d'appliquer des transformations à la caméra comme je le fais pour les objets, c'est à dire par exemple, faire tourner ma caméra autour d'un axe quelconque.
Pas trop de problème pour faire cela à part pour effectuer un redimentionnement des objets (voir même un retournement des objets si je met une échelle n'égative) en projection perspective.
En projection orthographique la méthode est simple.
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 void ProjMatrix::setGlOrthoMatrix (double l, double r, double b, double t, double n, double f) { matrix4f.m11 = (2 * scale.x) / (r - l); matrix4f.m12 = 0; matrix4f.m13 = 0; matrix4f.m14 = -((r + l) / (r - l)); matrix4f.m21 = 0; matrix4f.m22 = (2 * scale.y) / (t - b); matrix4f.m23 = 0; matrix4f.m24 = -((t + b) / (t - b)); matrix4f.m31 = 0; matrix4f.m32 = 0; matrix4f.m33 = (2 * scale.z) / (f - n); matrix4f.m34 = -((f + n) / (f - n)); matrix4f.m41 = 0; matrix4f.m42 = 0; matrix4f.m43 = 0; matrix4f.m44 = 1; this->l = l; this->r = r; this->b = b; this->t = t; this->n = n; this->f = f; }
Mais en projection perspective cela est plus compliqué et je ne vois pas du tout comment faire, j'ai cherché la formule sur internet mais en vain. :/
Alors je ne veux pas faire de changement d'échelle dans la matrice de vue car cela me fait retourner aussi la caméra lorsque l'échelle est négative et je ne veux pas que la caméra soit retournée.
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 matrix4f.m11 = (2 * n) / (r - l); matrix4f.m12 = 0; matrix4f.m13 = (r + l) / (r - l); matrix4f.m14 = 0; matrix4f.m21 = 0; matrix4f.m22 = (2 * n) / (t - b); matrix4f.m23 = (t + b) / (t - b); matrix4f.m24 = 0; matrix4f.m31 = 0; matrix4f.m32 = 0; matrix4f.m33 = -((f + n) / (f - n)); matrix4f.m34 = (-2 * f * n) / (f - n); matrix4f.m41 = 0; matrix4f.m42 = 0; matrix4f.m43 = -1; matrix4f.m44 = 0; isOrtho = false; this->l = l; this->r = r; this->b = b; this->t = t; this->n = n; this->f = f;
Je voudrais juste par exemple que le coin en haut à droite de l'écran aie pour coordonnée -largeur * 0.5f et non pas -1 comme c'est le cas avec la matrice de projection perspective actuelle. :/
Et pouvoir ainsi passez des coordonnées fenêtre en coordonnées monde et en coordonnée vue.
Voilà donc merci d'avance pour votre aide.
Partager