2011-11-21 4 views
0

Je voudrais savoir comment les sommets de glVertex2f(x, y) correspondent aux coordonnées réelles de l'écran. J'ai l'intention d'utiliser un plan complexe avec minR, minI et maxR, maxI (I et R - partie imaginaire et partie réelle), de sorte que le plan soit mappé à 512 x 512 pixels sur l'écran. J'ai des points de 512 étapes entre les valeurs min et max.OpenGL - Mappage entre x et y dans glVertex2f (x, y) pour afficher les coordonnées entières

Le mappage entre les sommets n'est pas clair puisque, j'ai dû mettre à l'échelle mon image planaire en utilisant glScalef(100, 100, 0) pour l'adapter grossièrement à l'écran. Mais encore, une grande partie est laissée en blanc.

Veuillez noter que j'utilise la routine glBegin(GL_POINTS) pour mapper les points dans le plan à l'écran. Le code semble donc,

for (X = 0; X < 512; X++) 
    for (Y = 0; Y < 512; Y++) 
    glVertex2f (Complexplane[X][Y].real, Complexplane[X][Y].imag); 

PS:

Complexplane[0][0].real = -2, Complexplane[0][0].imag = -1.2 
Complexplane[511][511].real = 1.0, Complexplane[0][0].imag = 1.8 

Répondre

1

Je suppose que vous avez pas réglé la projection ou matrices MODELVIEW - ils seront mis à la matrice d'identité par défaut BTW .. .

Pour coordonnées X, Y, un point sera visible si: -1 <= X <= 1, -1 <= Y <= 1

La fonction glViewport décrit comment cette RAN ge est mappé à la fenêtre. Il est initialement défini sur (0, 0, window_width, window_height) lorsque le contexte GL est créé. Le fait que glScale(100, 100, 0) occupe seulement une partie de la fenêtre suggère que vous appliquez une autre transformation ailleurs.

0

Le mappage dépend de l'ensemble de matrices de transformation. Dans jusqu'à OpenGL-2 le pipeline est

v_eye = ModelviewMatrix * v 
v_projected = ProjectionMatrix * v_eye 
v_clipped = clip(v_projected) 
v_NDC.xyzw = v_clipped.xyzw/v_clipped.w 

Les matrices par défaut sont l'identité, la seule opération appliquée à l'état par défaut est la coupure. v_NDC subit ensuite la transformation de la fenêtre d'affichage:

p.xyz = (v_NDC.xyz + 1) * viewport.wh/2 + viewport.xy 
+0

Merci pour votre réponse. – Prando

Questions connexes