Важная информация

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 52

Тема: "Новый" алгоритм быстрой 3D графики

  1. #1
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию "Новый" алгоритм быстрой 3D графики

    Он описан в zx-power.
    Тут и дополнения.
    В дополнениях написано что "способ очень похож на предложенный в SPECTRUM EXPERT#2 метод средней точки".
    Я пытался с этим всем разобратся, но почти ничего не понял (ибо описано всё очень сумбурно и нет полных исходников).
    Пробовал-ли кто-нибудь ковырять всё это дело?
    Или может кто сумеет разъяснить суть?
    Или есть желающие вместе разобратся?

  2. Этот пользователь поблагодарил Destr за это полезное сообщение:
    perestoronin (18.02.2014)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,122
    Благодарностей: 1075
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    в 3D Lame быстрая графика вроде бы:
    http://opensourcezx.untergrund.net/b..._lame_src.html

    все, что разобрался, там закраска треугольников и поворот фигур.

  5. Этот пользователь поблагодарил denpopov за это полезное сообщение:
    perestoronin (18.02.2014)

  6. #3
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,938
    Благодарностей: 3437
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Он описан в zx-power.
    Тут и дополнения.
    В дополнениях написано что "способ очень похож на предложенный в SPECTRUM EXPERT#2 метод средней точки".
    Я пытался с этим всем разобратся, но почти ничего не понял (ибо описано всё очень сумбурно и нет полных исходников).
    Пробовал-ли кто-нибудь ковырять всё это дело?
    Или может кто сумеет разъяснить суть?
    Или есть желающие вместе разобратся?
    Бегло посмотрел. Это два не одинаковых способа, но похожих.

    1) На каждой оси X, Y, Z по 64 зарубки (опорные точки). Оси поворачиваются, вычисляются новые координаты всех опорных точек, и уже по опорным точкам легко найти x,y-координаты точки на экране (простая геометрия). Вертеть такую систему лего - просчитал только 3 точки вершин координатных осей (или 4, если нулевая точка тоже вертится, а не стоит на месте), потом простой интеполяцией находятся по 64 опорные точки на каждой оси. Т.е. математика с умножениями нужна только для 3-х или 4-х точек.

    2) Почти тоже самое, вычисляются координаты вершин искомого куба, представляющего из себя оси координат, а потом простой геометрией внутри находятся координаты нужных точек. Разница в том, что приходится делать больше вычислений, если точки расположены не в 'простых' местах куба, которые можно получить деля стороны на 2, 4 и т.д. Т.е. простыми действиями. Нарисовать сферу или подобный обьект будет вряд ли быстрее, чем считать все точки по-честному.
    Первым способом это будет сделать намного быстрее, но при 64 опорных точках в системе координат, сфера будет угловатенькая. Но будет)

  7. Эти 3 пользователя(ей) поблагодарили Titus за это полезное сообщение:
    Andrew771 (19.02.2014), Destr (18.02.2014), perestoronin (18.02.2014)

  8. #4
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, ну ты вообще ничего нового не сказал!
    Это всё изложено в статьях, а всё равно непонятно (расплывчато).
    Ну примерно как на вопрос от какого-нибудь инопланетянина к любому человеку:
    - Объясните, как Вы дышите?
    Ты ответил как-бы:
    - Ну вдыхаю и выдыхаю, и всё!
    Вместо конкретного ответа:
    - Осцилляторная связка головного мозга даёт сигналы центру распределения импульсов которая в свою очередь отправляет синапсные сигналы мышцам диафрагмы, растягивающие и сжимающие лёгочные полости.

    Ответ этот тоже не абсолютно точен, но больше приближён к пониманию процесса.

    P.S. За внимание и ответ - благодарен, конечно, но уж если не трудно разъясни попонятней.
    Ну для деревенщины уж постарайся, браза!

    Цитата Сообщение от Titus Посмотреть сообщение
    простой интеполяцией
    Само слово "интерполяция" ввергает в ужас (ибо ещё никто не смог мне доступно объяснить что это за зверь), а уж приставка "простая" - вообще убивает (ведь получается есть и "непростая"!!!).
    Мрак.
    Последний раз редактировалось Destr; 18.02.2014 в 21:43.

  9. #5
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,938
    Благодарностей: 3437
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Само слово "интерполяция" ввергает в ужас (ибо ещё никто не смог мне доступно объяснить что это за зверь), а уж приставка "простая" - вообще убивает (ведь получается есть и "непростая"!!!).
    Мрак.
    Тогда спроси поточнее, чего тебе не понятно)

    На счет интерполяции.

    Приведу пример на одномерной системе координат.

    Алгоритм очень похож на алгоритм рисования линии.

    Вот у тебя есть две крайние точки оси с координатами 20 и 209 соответственно.

    Тебе надо надо найти 64 точки (что равно 63 интервалам), равномерно лежащие на этой оси. Как ты это будешь делать?

    Вычисляем сперва длину оси. 209 - 20 = 189. Это длина оси. Теперь эту ось надо разделить на 63 отрезка.

    Примерно это будет так:
    Начинаем размечать точки с координаты 20. Заносим ее координату в X[0]
    20: 189 - 63 = 126. Есть перенос? Нет, значит, идем далее
    21: 126 - 63 = 63. Есть перенос? Нет, значит, идем далее
    22: 63 - 63 = 0. Есть перенос? Нет, значит идем далее
    23: 0 - 63 = -63. Есть перенос? Да, значит прибавляем 189 (-63 + 189 = 126) и заносим координату 23 в X[1]
    24: 126 - 63 = 63. Есть перенос? Нет, значит, идем далее
    25: 63 - 63 = 0. Есть перенос? Нет, значит идем далее
    26: 0 - 63 = -63. Есть перенос? Да, значит прибавляем 189 (-63 + 189 = 126) и заносим координату 26 в X[2]
    и т.д.

    Таким образом ты расставишь координаты всех 64 точек лежащих на заданной оси. Быстро и сердито.

    Для трехмерной системы координат надо расставить не три набора точек x, y и z для каждой из 3-х осей.
    Последний раз редактировалось Titus; 18.02.2014 в 22:11.

  10. Этот пользователь поблагодарил Titus за это полезное сообщение:
    Destr (18.02.2014)

  11. #6
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    А теперь вопрос по сабжу: в "дополнениях" сказано: "Проблему перспективы проще всего решить перспективно спроектиравав 3D систему координат."

    Как???

    P.S. Не, ну я понимаю как повернуть любую точку и спроецировать её.
    (умножения на поворот по всем трём осям + умножения и деления на проекцию, но чтоб всю плоскость да за малотактов - это что-то нереально. а ведь автор грит что как об асфальт)

    P.S.S. А, да, забыл: Пока всё это в пределах экрана (-127...+127) - это ещё куда ни шло. А ежели +-12 бит?
    Получится ли такой финт или опять мне приснилось что в сказку попал?
    Последний раз редактировалось Destr; 18.02.2014 в 22:29.

  12. #7
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,938
    Благодарностей: 3437
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    А теперь вопрос по сабжу: в "дополнениях" сказано: "Проблему перспективы проще всего решить перспективно спроектиравав 3D систему координат."

    P.S.S. А, да, забыл: Пока всё это в пределах экрана (-127...+127) - это ещё куда ни шло. А ежели +-12 бит?
    Получится ли такой финт или опять мне приснилось что в сказку попал?
    Где написано про перспективную систему 3д координат? Я бегло читал, не заметил.

    Не знаю, как можно это сделать, ведь в перспективе частота следования точек по оси уменьшается приближаясь к нулю координатной системы.

    да хоть сколько бит, но придется применять 16-битную арифметику, а это уже гораздо медленнее) Это только если для игры, для демки обычно бывает не нужно.
    Кроме того, где 16 бит, там обычно 64 точками не обойдешься. Зачем 16 бит, если само поле 64x64x64?

  13. #8
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Где написано про перспективную систему 3д координат? Я бегло читал, не заметил.
    Я ведь процитировал.
    Собственно это последний абзац из "дополнений"

    Цитата Сообщение от Titus Посмотреть сообщение
    Это только если для игры
    Для игры (демок я не мастак да и не любитель)

    Цитата Сообщение от Titus Посмотреть сообщение
    Зачем 16 бит, если само поле 64x64x64?
    Я не ограничивал поле 64, это в статье оно так заточено.
    Конечная цель - развернуть алгоритм так чтоб было актуально больше 64 точек (ну хотя-бы бит 12, для круглости)

  14. #9
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,938
    Благодарностей: 3437
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Я не ограничивал поле 64, это в статье оно так заточено.
    Конечная цель - развернуть алгоритм так чтоб было актуально больше 64 точек (ну хотя-бы бит 12, для круглости)
    Тогда подобный аглоритм скорее не подойдет.
    Очень огромные получатся оси (с большим числом опорных точек), будет контр-продуктивно таким методом считать.

  15. #10
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Тогда подобный аглоритм скорее не подойдет.
    Очень огромные получатся оси (с большим числом опорных точек), будет контр-продуктивно таким методом считать.
    Я в общем-то об этом думал.
    Но вспомнил одну фразу алонкодера (из текста где он описывал свой вольф-движок) в которой признался что по честнаку считать долго и поэтому лучи трассируются через один, а пропущеные интерполируются.
    У меня мелькнула мысль не получится ли что-либо подобное провернуть и с этим алгоритмом.
    Или вообще - может быть можно что-то сделать с поворотами/проекциями без всяких умножений.
    Ну например - таблицами (даже гигантскими - по сути в zx128 можно смело пожертвовать под это дело пару-другую страниц).
    Вот только как к этому подступится - пока слабо представляю.

Страница 1 из 6 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 41
    Последнее: 28.11.2013, 23:54
  2. Алгоритм "вдаль к горизонту"
    от Destr в разделе Программирование
    Ответов: 7
    Последнее: 05.09.2013, 13:57
  3. Ответов: 60
    Последнее: 24.02.2012, 12:25
  4. Ответов: 0
    Последнее: 15.08.2010, 12:38

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •