2011-02-28 1 views
3

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

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

+0

Попробуйте рисовать больше точек? – Goz

+1

Зачем вам переопределять Bresenham с OpenGL? OpenGL уже предоставляет вам примитив строки. – datenwolf

+1

@ datenwolf, это классическая домашняя проблема во вводном классе компьютерной графики. –

ответ

0

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

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

+1

-1: ОП, скорее всего, необходимо использовать алгоритм Брешенема специально из-за требования к классу. Так что это не отвечает на вопрос. – Omnifarious

2

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

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

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

5

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

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