Bonjour,
comment je peux zoomer une partie de ma scène et ne pas zoomer une autre, càd appliquer le zoom sur un seul objet précis
Merci d'avance
Bonjour,
comment je peux zoomer une partie de ma scène et ne pas zoomer une autre, càd appliquer le zoom sur un seul objet précis
Merci d'avance
salut,
c'est pas très clair... tu veux voir toute la scène zoomée ou une sorte de zoom sur une partie de la scène avec la scène normale par dessous?
Bonjour,
en fait dans ma scène j'ai un cube par exemple et un repère dessiné au milieu, je veux que lorsque je fait un zoom le cube soit zoomé et le repère reste tel qu'il est
Merci d'avance
Bonsoir
Pour crée un zoom réaliste, il suffit de diminué l'angle de projection de la matrice de rendu (pour ne pas dire de projection). Donc dans ton cas, génère une première matrice avec un angle de projection Alpha1 et tu dessine ton cube avec celle ci. Ensuite tu génère une seconde matrices avec un angle de projection Alpha2 > Alpha1 et tu dessine ton repère avec cette dernière. Et ainsi tu aura le rendu désiré.
Plus ton angle de projection est petit, plus la sensation de zoom sera grande.
Autre solution (plus trash si je puis dire) si tu utilise des shaders : dans le vertex shaders qui fait le rendu du cub, tu multiplie gl_Position.xy par un float plus grand que 1 et tu aura le résultat.
Exemple, si tu veux un zoom x2, tu rajoute simplement un :
Si tu veux faire çà de manière plus propre : voici une representation de la matrice de projection.
Code : Sélectionner tout - Visualiser dans une fenêtre à part gl_Position.xy *= 2.0 ;
pour le rendu du cube, il te sufira de généré une nouvelle matrice comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 c00 c10 c20 c30 c01 c11 c21 c31 c02 c12 c22 c32 c03 c13 c23 c33
En espèrent t'avoir aidé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 c00*ZoomCoef c10*ZoomCoef c20*ZoomCoef c30*ZoomCoef c01*ZoomCoef c11*ZoomCoef c21*ZoomCoef c31*ZoomCoef c02 c12 c22 c32 c03 c13 c23 c33![]()
tu as en effet plusieurs façon de voir la chose:
- soit tu joues sur la matrice de projection en changeant la valeur qui joue sur l'ouverture de la vue (field of view ou fov en anglais, c'est à dire le champ de vision)...
de manière générale ça revient à jouer sur le rapport (far-near)/(left+right)
pour open gl, y a plein de solutions, lis donc les doc de glOrtho, glFrustrum ou gluPerspective- soit tu joues sur la matrice de position/homothétie de l'objet ou du groupe d'objet en la multipliant par une matrice du type:
sx 0 0 0
0 sy 0 0
0 0 sz 0
0 0 0 1
avec sx le facteur d'échelle pour l'axe des x, sy pour l'axe des y sz pour l'axe des z... en général on les fixe à la même valeur...
en opengl, tu peux le faire par un glScale
Là tu ne toucheras qu'à l'échelle d'une partie de la hiérarchie d'objet de ta scène...- sa solution du shader revient à ce que tu peux faire par le point précédent mais de manière plus complexe...
voilà à toi de voir![]()
Pour la matrices :
sx 0 0 0
0 sy 0 0
0 0 sz 0
0 0 0 1
je pense d'une manière général le sz = 1 sinon il risque d'y avoir des décalage dans le depth buffet avec le rendu non zoomer.
Sinon pour le glScale : attention, homothétie du zoom çà doit se faire impérativement dans le plans de la camera :
Il y a une animation d'un zoom sur cette page pour mieux comprendre le fonctionnement d'un zoom
Partager