2011-11-21 4 views
0

glVertex2f(x, y)의 정점을 실제 화면 정수 좌표에 매핑하는 방법을 알고 싶습니다.OpenGL - glVertex2f (x, y)에서 정수 좌표를 화면에 표시하는 x와 y 간의 매핑

minR, minI 및 maxR, maxI (I 및 R - Imaginary 및 Real 부분)와 함께 복잡한 평면을 사용하여 평면이 화면의 512 x 512 픽셀에 매핑되도록하려고합니다. 최소값과 최대 값 사이에 512 단계의 포인트가 있습니다.

꼭지점 간의 매핑이 명확하지 않기 때문에 평면 이미지를 glScalef(100, 100, 0)을 사용하여 화면 크기에 맞게 조정해야하므로 명확하지 않습니다. 그러나 여전히 많은 부분이 비어 있습니다.

glBegin(GL_POINTS) 루틴을 사용하여 비행기의 점을 화면에 매핑합니다. 이 코드는 이렇게 보이는 ,

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 

답변

1

- 그들은 BTW 기본적으로 행렬로 설정됩니다 .. -1 <= X <= 1, -1 <= Y <= 1

glViewport 기능이 RAN 방법을 설명.

경우 X 용

, Y 좌표, 포인트가 표시되며 ge가 창에 매핑됩니다. GL 문맥이 생성 될 때 초기에 (0, 0, window_width, window_height)로 설정됩니다. glScale(100, 100, 0)이 창 부분 만 차지한다는 사실은 다른 곳에서 다른 변환을 적용하고 있음을 나타냅니다.

0

매핑은 변환 행렬 집합에 따라 다릅니다. OpenGL을-2까지 파이프 라인이

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

이다에서 기본 행렬은 정체성, 그래서 기본 상태에서 적용하는 유일한 작업은 클리핑입니다.

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

감사합니다 귀하의 회신 : v_NDC는 뷰포트 변환을 겪는다. – Prando

관련 문제