Рисование круга с помощью алгоритма Брезенхэма на OpenGL - PullRequest
3 голосов
/ 28 февраля 2011

Я могу нарисовать круг с помощью алгоритма.Тем не менее, граница выглядит странно, пиксели выглядят так отдельно друг от друга.Я хочу, чтобы они были ближе.Я пытался увеличить размер точки.Но результат не так уж и хорош.Итак, я подумал, что, может быть, будет лучше, если я смогу полностью заполнить пиксель (я полагаю, он имеет квадратную форму). Как мне это сделать или у вас есть идея получше?Теперь это выглядит так: http://img690.imageshack.us/i/circlev.jpg/

Заранее большое спасибо.

Ответы [ 3 ]

5 голосов
/ 28 февраля 2011

Без кода трудно диагностировать проблему. Фактическое расположение пикселей выглядит правильно для этого алгоритма. Похоже, что вы используете проекционную матрицу, которая не переводит мировое пространство непосредственно в экранное пространство.

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

2 голосов
/ 28 февраля 2011

Судя по вашему jpeg, мне интересно, действительно ли то, что вы думаете, составляет один пиксель в мировом пространстве.Возможно, ваша матрица проекций не совсем так, как вы думаете.

Включен ли GL_POINT_SMOOTH?- Возможно, что это портит вещи.Эти пиксели выглядят странно круглыми.

Предполагая, что использование этого алгоритма важно для вас (и вас не интересуют методы, которые могут быть более эффективными), вы можете нарисовать квад для каждого «пикселя» вместо использованияGL_POINTS.

0 голосов
/ 28 февраля 2011

используйте метод sin / cos, тогда вы можете рисовать линии из одной точки в другую, также это позволяет вам также изменять детали многоугольника, не говоря уже о том, что заполнить круг намного проще (рисуйте треугольники от середины к краям)).

Если вы используете более высокую детализацию, результат будет почти таким же, как у Брезенхэма.

...