OpenGL - отображение между x и y в glVertex2f (x, y) для отображения целочисленных координат - PullRequest
0 голосов
/ 22 ноября 2011

Я хотел бы знать, как вершины 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);

П.С .:

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

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Я предполагаю, что вы не установили матрицы проекции или просмотра модели - по умолчанию они будут установлены в единичную матрицу. Кстати ...

Для координат X, Y точка будет видна, если: -1 <= X <= 1, -1 <= Y <= 1

Функция glViewport описывает, как этот диапазон отображается в окне. Первоначально он установлен в (0, 0, window_width, window_height) при создании контекста GL. Тот факт, что glScale(100, 100, 0) занимает только часть окна, предполагает, что вы применяете другое преобразование в другом месте.

0 голосов
/ 22 ноября 2011

Отображение зависит от набора матриц преобразования.В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...