Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

z-buffer #6

Closed
boddicheg opened this issue Dec 22, 2015 · 1 comment
Closed

z-buffer #6

boddicheg opened this issue Dec 22, 2015 · 1 comment

Comments

@boddicheg
Copy link

Доброго времени суток!

Хочу сказать спасибо за ваши статьи на хабре о компьютерной графике - это то, что нужно таким новичкам, как я.
И, как полагается, у меня возникли некоторые вопросы по статье №3, и, когда у вас появится свободное время, прошу ответить.

В комментариях вы привели пример картинки с "дырками", когда mr. guyfawkes спросил у вас насчет хака

    P.x = j; P.y = t0.y+i; // a hack to fill holes (due to int cast precision problems)

Вы указали, что это ошибка с округлениями, и добавили на репозиторий конструктор копирования для Vec3i с округлением.

В чем моя проблема: 1.png в прикрепленных
Вроде бы очень похоже на вашу картинку с "дырками". НО, я использую double представление точки, т.е. все коодинаты:

      struct vertice {
        double x;
        double y;
        double z;

т.е. как видите, округлений особо нет(и да, я понимаю, что это медленне по сравнению с int)

Поскольку у меня координаты типа [-1.0, 1.0], то и прохожусь я по по координатам с помощью такого костыля:

    for (double y = f.y; y < t.y; y += m_delta)

где m_delta - некое магическое число(шаг), которое для 1.png установлено в 0.001

если уменьшить шаг, то количество дырок уменьшается, но не пропадает(2.png - шаг установлен в 0.00035). Сами понимаете, что производительность падает при таком решении(у меня, для сравнения, 0.26105 сек для первого изображения, и 1.71324 сек для второго)

Нужна ваша конструктивная критика моих решений.
вот код метода рисования треугольника: github

1.png
2.png

@ssloy
Copy link
Owner

ssloy commented Dec 22, 2015

Добрый день, собственно, это и есть проблема округления.
Попробуйте перед отрисовкой всех треугольников округлить экранные координаты вершин.
ДС

On 15-12-22 03:51:39, Bogdan wrote:

Доброго времени суток!

Хочу сказать спасибо за ваши статьи на хабре о компьютерной графике - это то,
что нужно таким новичкам, как я
И, как полагается, у меня возникли некоторые вопросы по статье №3, и, когда у
вас появится свободное время, прошу ответить

В комментариях вы привели пример картинки с "дырками", когда mr guyfawkes
спросил у вас насчет хака

Px = j; Py = t0y+i; // a hack to fill holes (due to int cast precision problems)

Вы указали, что это ошибка с округлениями, и добавили на репозиторий
конструктор копирования для Vec3i с округлением

В чем моя проблема: 1png в прикрепленных
Вроде бы очень похоже на вашу картинку с "дырками" НО, я использую double
представление точки, те все коодинаты:

  struct vertice {
    double x;
    double y;
    double z;

те как видите, округлений особо нет(и да, я понимаю, что это медленне по
сравнению с int)

Поскольку у меня координаты типа [-10, 10], то и прохожусь я по по координатам
с помощью такого костыля:

for (double y = fy; y < ty; y += m_delta)

где m_delta - некое магическое число(шаг), которое для 1png установлено в 0001

если уменьшить шаг, то количество дырок уменьшается, но не пропадает(2png - шаг
установлен в 000035) Сами понимаете, что производительность падает при таком
решении(у меня, для сравнения, 026105 сек для первого изображения, и 171324 сек
для второго)

Нужна ваша конструктивная критика моих решений
вот код метода рисования треугольника: github

1png
2png


Reply to this email directly or view it on GitHub.*

@ssloy ssloy closed this as completed Jan 25, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants