2013-07-09 2 views
1

Я использую gluPoject() найти (winX, winY) пикселя координаты из (objX, objY, objZ) мировые координаты, но проблема заключается в том, что gluProject() возвращает значение (winX, winYGLdouble), тогда как пиксельные координаты - int.gluProject() окно координат целого значение

Я хочу знать, в каком сценарии мы должны взять floor(winX) или ceil(winX) для окончательной координаты пикселя?

ответ

1

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

+0

Спасибо за ответ, но проблема с этим решением - конвейер OpenGL не округляет координаты пикселей в соответствии с этой функцией. Поэтому, если я использую эту функцию для определения конечной позиции пикселя для точки, это может быть случай, когда я могу довести свою точку до ближайшего пикселя. Например, моя точка (1,2,3), и ее (winX, winY) значение (2.3, 3.6). Поэтому я сопоставляю его с (2,4). Но когда я передаю эту точку OpenGL с использованием glBegin (GL_POINTS) API, он может сопоставляться с любым из (2,3) или (2, 4) или (3,3) или (3,4) в соответствии с собственным округлением OpenGL метод. Я хотел знать, как это работает OpenGL. – kshitij

+0

@kshitij: Какие матрицы вы используете при рисовании точки как 'GL_POINTS'? Вы должны знать, что при типичной настройке 'glOrtho (0, w, 0, h, ...)' вы снова окажетесь с пиксельными центрами на 0,5, поэтому вам нужно добавить 0,5 к x и y после пола операция. Вы также должны знать, что использование мультисэмплинга усложняет ситуацию. – derhass

Смежные вопросы