OpenGL - glVertex2f(x,y)中x和y之间的映射,以筛选整数坐标

时间:2011-11-21 23:49:36

标签: c opengl

我想知道glVertex2f(x, y)的顶点如何映射到实际的屏幕整数坐标。

我打算使用具有minR,minI和maxR,maxI(I和R - 虚部和实部)的复平面,使得平面在屏幕上被映射到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);

P.S。:

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

2 个答案:

答案 0 :(得分:1)

我假设您没有设置投影或模型视图矩阵 - 它们将默认设置为单位矩阵BTW ......

对于X,Y坐标,如果出现以下情况,则会显示一个点:-1 <= X <= 1, -1 <= Y <= 1

glViewport函数描述了此范围如何映射到窗口。创建GL上下文时,它最初设置为(0,0,window_width,window_height)。 glScale(100, 100, 0)仅占据窗口一部分的事实表明您正在其他地方应用另一个转换。

答案 1 :(得分: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

默认矩阵是标识,因此在默认状态下应用的唯一操作是裁剪。 v_NDC然后进行视口转换:

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