C++ с OpenGL Pixel Perfect Plot

Мне нужно отобразить пиксель в окне в соответствии с его положением в пикселях целыми числами, а не с плавающей запятой. например, если бы я рисовал 0, 0, это был бы самый верхний левый угол окна, 1,1 был бы на один пиксель правее 0, 0 и на 1 пиксель ниже 0. Я думаю, что я нужно, чтобы это было похоже на сетку. Меня не волнует, является ли 0, 0 источником, как обычно, но мне нужно, чтобы он считался по пикселям, не имея 1 как максимум и -1 как минимум или что-то еще.

Вещи, которые я уже пробовал: я думал, что могу просто сделать что-то вроде этого Window Width ^-1 * X для построения графика, и это действительно работает, но не всегда. В любом случае, как бы я это сделал? Я также сделал положение X / ширину экрана, и это работает лучше всего, но оно перестает работать каждые 10 или около того пикселей.


person Business Business    schedule 26.03.2013    source источник


Ответы (1)


Во-первых, OpenGL не гарантирует идеальное размещение пикселей во всех случаях. Однако есть очень распространенная ошибка: центр каждого пикселя не будет иметь целочисленных координат, если вы используете пиксельные координаты.

Вот схема нижнего левого пикселя в окне просмотра OpenGL.

+Y
^
|     
+-----+
|     |
|  o  |
|     |
+-----+---> +X

Если ваши данные преобразуются таким образом, что каждый пиксель имеет ширину и высоту, равные 1 единице, то центр пикселя находится в точке (0.5, 0.5). Если вы нарисуете GL_POINT в этом пикселе, координаты должны быть (0.5, 0.5). Если вы нарисуете прямоугольник, он будет идти от (0,0) до (1,1). Если вы проведете через него вертикальную линию, то линия должна иметь координату x 0,5.

И так далее.

person Dietrich Epp    schedule 26.03.2013