我想知道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
答案 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