Отбрасывание нелицивых граней с учетом перспективы

Тема в разделе "WASM.A&O", создана пользователем Aloner, 5 авг 2008.

  1. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Привет всезнающий ALL !
    сабж: как доработать обычный метод удаления нелицевых поверхностей (ищем векторное произведение двух сторон полигона(нормаль полигона), запоминаем, при вращении умножаем эту нормаль на матрицу преобразований, если компонента Z<0, то отбрасываем) для работы с учетом перспективы?
    Можно конечно, делать перспективное преобразование координат, а затем считать заново нормаль - но это долго (слишком много операций на подсчет нормали)... Может есть способ более быстрый?
     
  2. chAlx

    chAlx New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    74
    А разве расчёт и отбрасывание невидимых граней происходит не после вращений и прочих преобразований? И какая разница тогда, какой FOV: если полигон повёрнут от нас, то под каким углом его со своей точки не рассматривай, всё равно видимым он не станет.
     
  3. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Извини, я не в курсах что такое FOV... поясни плиз...
     
  4. chAlx

    chAlx New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    74
    Aloner:

    Так, при изучении вопроса попалось что-то новое.. Всё, процесс завис?
    http://www.google.com/search?hl=ru&q=define%3AFOV

    Я имел в виду, что перспектива влияет только на форму видимой части полигона (ну и размер), но не влияет на саму видимость.

    Addon:
    Блин, движок мой пост 2 раза показал :/
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Aloner
    Вроде нормаль для определения видимости считается именно после перспективного преобразования. К сожалению это требует ещё одной стадии конвейера, но у меня в софтварном двиге не получилось на стадии преобразования камеры, были артефакты ввиде слишком раннего или позднего отсечения.
     
  6. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Спасибо, что просветил насчет FOV :))
    Я считаю нормаль до преобразования в перспективу, а потом вращаю, но уже в перспективе...Из-за этого плоскость, которая в аффином пространстве невидима, может быть видима в перспективном пространстве... мож я не правильно употребил слово перспектива? Я имел ввиду что координаты X и Y аффиные подвергаются делению на 1/z для перевода в перспективное пространство. Поэтому полигон который в аффином пространстве перпендикулярен камере не отобразится, а вот в перспективном он уже не будет перпендикулярен и его будет видно...
     
  7. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Я тоже предлагал такой метод в самом первом сообщении, но ты сам видишь что это лишнии операции, значит скорость меньше, что ни есть гуд... А другой метод пока что то не придумывается :))
     
  8. chAlx

    chAlx New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    74
    Aloner:
    Да, пожалуй :)

    А зачем вообще считать нормаль до преобразований? Преобразования разве не над координатами вершин делаются?

    Кстати, напиши по-простому, какие числа у тебя описывают полигона и окружающую среду (типа: коортинаты того, угол этого и т.п.) Тогда можно будет приводить примеры альтернативных преобразований.

    А можно вообще не удалять такие полигоны до тех пор, пока другие методы не начнут проверять видимость? Ведь при этом первый же "контакт" метода с полигоном выявит, в какую сторону тот повёрнут -- можно сразу его и пометить лишним. Или это ещё дольше?
     
  9. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Так оно нарное и делается, я это предлагал как вариант в самом первом сообщении. Но это медленно. Поворачивать нормаль быстрее (3 умножения и 2 сложения (нас интересует только Z) ), чем все время заново считать нормаль (6 умножений и 12 вычитаний и 3 сложения). Однако это работает тока для аффиного, для перспективного некорректно.
    Можно и так, но только медленее это дело. Лучше уж сразу откидывать. Эти методы на обработку видимости больше ресурсов затратят.

    А ты случаем сам движки не писал под Дос? :))
     
  10. chAlx

    chAlx New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    74
    Так я и не понял, зачем её каждый раз считать, если она нужна только один раз: когда пора отбрасывать лишнее. Вот перед этим и вычислить Z нормали, или ещё как..


    Графические движки я не писал, хотя после каждого демопати возникало ощущение, что мог бы поучаствовать ;)
     
  11. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Дык и я тебе про тоже, что она считается только когда отбрасываем. (отбрасываем каждый раз как рендим сцену). Хочется что бы она в этот момент быстро считалась, так как полигонов может быть около 1000 как самый минимум. Т.е. здесь есть возможность здорово влиять на FPS.
    Ухты, ты на пати ходишь? Я лично не раз не был (я еще тока год демками занимаюсь). Как оно, кроме того что вдохновляет :)) ?
     
  12. chAlx

    chAlx New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    74
    Aloner:
    Ну так какая разница, просчиталась уже перспектива или нет, если всё равно надо взять новые координаты и посчитать по ним нормаль?

    Давай лучше конкретно рассмотрим: есть на входе 3*3 координаты полигона плюс какие-то общие параметры сцены: fov, координаты "камеры" (0,0,0?), направление взгляда камеры, расстояние от камеры до экрана.. Вот перечисли их в общем виде (именами переменных), тогда можно будет писать, какие функции над какими-то переменными выполняются и чем их можно заменить.

    А сходить сейчас самое время на CC'08. Организация там не ахти какая, зато тусовка подходящая. Там на все вопросы по 3D-графике на раз ответят ;)
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Aloner
    У Ламота вроде отбрасывалось после перевода в систему камеры, у меня так не получилось, про артефакты уже писал. На Gamedev-е мне посоветовали после перспективной и всё качественно заработало. Попробуй ещё попытать Алексея Борескова, но мне он не ответил. Я писал софт двиг по книге Ламота, ничё так вышло, правда на текстурировании спёкся, сделал только градиентную заливку.
     
  14. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
  15. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
  16. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Вот глюки с инетом, блин...
     
  17. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
  18. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Спасибо!
    Попробую спросить!
    Движок я уже сделал(первый вариант), ща его оптимизирую и убираю баги. У меня тоже: 320x200x64k цвета, текстурирование с билинейной фильтрацией + освещение по Фонгу с бликами и с учетом затухания мощности от расстояния (без лайтмэпов). Пока он оч медлителен, но это в основном потому что всю часть, связанную с освещением я еще не перевел на быстрые алгоритмы. Сначала движок в Борланд Паскале собирал с асмовскими вставками, а ща перевожу его на Фри Паскаль под защищенный 32-битный режим... Затягивает это дело конечно, много всего пересекается на этой почве: и математика, и кодинг, и арт... Полезно для мозгов :))
    Я кстати много алгоритмов в DemoDesing3d подсмотрел, классный ФАК, разжеванно все прям для меня :)))
     
  19. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Круто, я освещение тоже сделал, но навароченное не стал, тормоза думаю были-бы будь здоров, правда на большом разрешении. На текстурирование забил так как мне 8 бит при низком разрешении ну совсем не нравится. Делал на DirectDraw и С++. Сейчас изучаю DirectX10, всё-таки попроизводительнее будет. -) А так да, мозги развивает это будь здоров, меня тоже захватило.
     
  20. Aloner

    Aloner New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2008
    Сообщения:
    96
    Ок, подумаю как описать общие параматеры, чтоб по понятнее было...
    Кстати про СС'08 - прикольно, там даже конкурс на родной ZX Spectrum есть :)) вспоминаю молодость: 128k оперативы, семерочные дискеты, бэйсик :)) Надо будет потом скачать демки под эмулятор...
    Я где то даж читал про 3D графику на нем с реализацией освещения по Фонгу (лайтмэпы конечно)! Это конечно нечто!