Навигация
Поддержать материально
Steam Greenlight

Логотипы
Медальки
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Темы форума
187 - Bullet Heaven
Вчера, 20:39
 Mefistofel
187 - ?
21.11.2024
 Dan
Galactic Showdown -…
21.10.2024
 KregHek
Новый IGDC
5.08.2024
 rimush
186 - Strategy!
15.07.2024
 VoroneTZ
WoL
3.07.2024
 Darthman
Привет выжившие
21.05.2024
 GeePee
185 - RPG
9.02.2024
 Vaskrol
В каком банке открыт…
24.01.2024
 Darthman
185 - ?
30.12.2023
 Mefistofel
Сейчас на сайте
Гостей: 17
На сайте нет зарегистрированных пользователей

Пользователей: 1,790
новичок: Durved
Обсуждение «3D Virtual Pool [Free Fall]»
Страница 2 из 3 < 1 2 3 >
rip
Avatar пользователя

Опубликовано 28.11.2016 12:53 (8 лет назад)    #
Если рисуешь софтварно - то можно сразу шары гладкие рисовать без треугольников каким-нибудь рейтрейсингом.
Bullet Heaven:Не участвую.
Zer0
Avatar пользователя

Опубликовано 28.11.2016 21:47 (8 лет назад)    #
rip написал:
Если рисуешь софтварно - то можно сразу шары гладкие рисовать без треугольников каким-нибудь рейтрейсингом.


Рейтрейсинг не очень подходит в данном случае.
Есть Volumetric rendering, из разряда как это делают на шейдерах, но эта тема крайне адвансед: http://www.alanzucconi.com/2016/07/01/volumetric-rendering/
Bullet Heaven:Не участвую.
Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 28.11.2016 22:18 (8 лет назад)    #
Тут скорее всего терминологическая проблема. Ибо если не читать про рейтрейсинг - Я согласен с rip'ом - можно рисовать шарики сразу шариками. Технически говоря - сразу билбордами с текстурой шара. Можно даже приделать фейковое освещение. Ничего особенного с глубиной делать не нужно - физика не позволит шарикам влезть друг в друга, а результат будет лучше, чем угловатые шары.
Если текстур нет, можно просто рисовать поверх с нужным размером по глубине.
Конечно костыль, но тут оправдано.
Bullet Heaven:Не участвую.
Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 28.11.2016 22:19 (8 лет назад)    #
Хм, походу в статье про то же, только для шейдеров.
Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 29.11.2016 08:40 (8 лет назад)    #

Mefistofel
Если честно, не разбирался глубоко в вопросе, но вроде как люди придумали очень годные и экономичные методы быстрого рисования треугольников. Традиционной проблемой являются так же дырки между полигонами или наоборот - когда полигоны друг на друга налазиют.
Вот есть занятный цикл статей, там про растеризацию треугольников в самом начале.
https://habrahabr.ru/post/248153/

Спасибо. Очень хорошо все расписано в статье. Многие ошибки указаны с первым примером кода. У меня часто в коде попадаются опечатки, и что грустно, замечаю их через день-два, после пошагового деббага, мне нужно держаться какого-то порядка в своем коде.
А так алгоритмы брал из разных источников, читал пока не приходило понимания самой сути:
http://pmg.org.ru/basic3d/index.html
https://habrahabr.ru/post/257107/
http://blog.scaytrase.ru/image_synthesis/83/
и книжка "Вильямс. Компьютерная графика и стандарт OpenGL"


Zer0
Есть подозрения что это либо баги связанные с z-buffer, или с тем рисуешь ли ты в вершинах треугольника точки или нет (вопрос к алгоритму растеризации).

Обычный растеризатор использует алгоритм брезинхема с чистыми интами, потому в вершинах рисуются все точки, и часто треугольники перекрываются именно в вершинах. Я точно помню что в 3д для линий и треугольников были опции по рисованию граничных пикселей на стыках, чтоб правильно обрабатывался альфа-блендинг и не было перекрытий.

Возможно проблемы возникают при округлении, и у треугольников разные координаты вершин. Если ты будешь пилить мультисемплинг на краях или антиалязинг, там все сильно сложнее.

Да, алгоритм Брезенхэма у меня используется, но видимо какой-то "свой" вариант реализации, в интернете полно описаний, пока не сделаешь не поймешь где допустил ошибки.


Zer0
Не так много, каждый следующий уровень детализации в 4 раза меньше по объему чем предыдущий. Зато а) уменьшается необходимая пропускная способность памяти б) улучшается качество картинки
...
https://fgiesen.wordpress.com/2013/02/08/triangle-rasterization-in-practice/
Fill rules и дальше могут быть полезны.

Спасибо. Еще немного информации в копилку знаний.
Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 29.11.2016 08:46 (8 лет назад)    #

rip
Если рисуешь софтварно - то можно сразу шары гладкие рисовать без треугольников каким-нибудь рейтрейсингом.

Рейтрейсинг разве для рендеринга в реальном времени тоже подходит?


Zer0
Есть Volumetric rendering, из разряда как это делают на шейдерах, но эта тема крайне адвансед: http://www.alanzucconi.com/2016/07/01/volumetric-rendering/

С шейдерами пока не очень "дружу". Как-то пытался разобраться, но все разбиение на маленькие куски кода пугают немного, а в основном коде только занимаешься передачей разных данных и атрибутов.
Bullet Heaven:Не участвую.
rip
Avatar пользователя

Опубликовано 29.11.2016 09:36 (8 лет назад)    #
Я, например, в своей игре где воксели взрывы рисовал софтверно в виде шаров. Термин рейтрейсинга тут очень даже применим и в реальном времени. Просто [s]в нереальном[/s] не в реальном времени рендерят когда объектов дофига, куча отражений, антиалайзинг и прочие украшательства. И туда еще кучу отсечений навешивают чтобы понять в какой объект луч влетел. Объекты всякие с хитрой геометрией. А тут у нас 3 шара и плоскость. Можно в лоб все объекты перебрать и решить для каждого из них одно квадратное уравнение.
Bullet Heaven:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 29.11.2016 09:44 (8 лет назад)    #
Рейтрейсинг разве для рендеринга в реальном времени тоже подходит?

В какой-то мере подходит и для реалтайма.

редакция от Darthman, 29.11.2016 09:51

Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 29.11.2016 20:02 (8 лет назад)    #
Столько всего хочется сделать, а нужно довести хотя бы до играбельного состояния.
Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 30.11.2016 20:56 (8 лет назад)    #
Не успеваю доделать до конца, придется завершить игру уже после конкурса в спокойном темпе.
Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 01.12.2016 07:59 (8 лет назад)    #
Ночью всегда вылазят баги, поэтому загружаю обновленную версию. В этой версии шарики просто так не пропадают, и теперь можно хоть играть и набирать баллы с переходом на следующий уровень, а также добавил новое казуальное меню в разделе "Игра", и все лишние выкинул из релизной версии.

редакция от VanyaR1, 01.12.2016 13:05

Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 02.12.2016 06:47 (8 лет назад)    #
В игре можно побаловаться освещение. На NumPad'e клавиши 4,6 - влево, вправо, клавиши 8, 2 - вверх, вниз, клавиши 5,0 - вперед, назад двигать источник света.
Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 15.12.2016 06:20 (8 лет назад)    #
Удалось переписать алгоритм рисования треугольников. Дырочек на гранях больше нет.
А дальние объекты получаются ступенчатыми. Похоже здесь уже нужно применять антиалиасинг или способ уменьшения полигонов.
Bullet Heaven:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 15.12.2016 09:03 (8 лет назад)    #
Круто, на самом деле круто. Завидую и восхищаюсь!
Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 16.12.2016 08:42 (8 лет назад)    #
Пытаюсь разобраться со всеми этими FPS, фреймрейтом, игровым циклом, плавным движением:

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


Примерно алгоритм цикла следующий:
previous = currentTimeMillis();
lag = 0L;
while (true) {
current = currentTimeMillis();
elapsed = current - previous;
previous = current;
lag += elapsed;
while (lag >= MS_PER_UPDATE) {
updateLoop();
lag -= MS_PER_UPDATE;
}
render(lag / MS_PER_UPDATE);
sleep(1);
}


в функции render(d)
draw(x + dx * d, y + dy *d) // примерно так


я просмотрел кучу способов реализации циклов, но этот показался более правильным,
но MS_PER_UPDATE пока ставлю 1000/60, а рекомендуют устанавливать от возможностей системы, не не понятно как.

редакция от VanyaR1, 16.12.2016 08:49

Bullet Heaven:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 16.12.2016 09:54 (8 лет назад)    #
Пиксели монитора не мгновенно переключаются, особенно с черного на белый. На некоторых мониторах пиксель может переключаться и по 1\60й секунды, отсюда и размазывание при движении.

1000/60,

Это будет справедливо только для 60Гц мониторов, но не все мониторы работают на 60Гц. ЭЛТ работали на разных частотах, хоть на 72, хоть на 75. А LCD сейчас в основном 60\120\144Гц.
Устанавливать от возможностей системы это значит грузить видюху на полную и гори оно огнём, тоже неверно. Зачем рендерить 1000 кадров, если показать можно лишь 120? Идеального решения тут не будет. Чем-то в любом случае придётся пожертвовать.
Bullet Heaven:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 16.12.2016 09:55 (8 лет назад)    #
sleep(1);

дичь!
Bullet Heaven:Не участвую.
VanyaR1
Avatar пользователя

Опубликовано 16.12.2016 12:06 (8 лет назад)    #
Darthman написал:
sleep(1);

дичь!



Так лучше: sleep(start + (1000.0/FPS) - currentTimeMillis());
Bullet Heaven:Не участвую.
ZblCoder
Главный Говнюк
Avatar пользователя

Опубликовано 16.12.2016 12:34 (8 лет назад)    #
VanyaR1 написал:
Так лучше: sleep(start + (1000.0/FPS) - currentTimeMillis());

не лучше. sleep странная вещь, работает вроде не стабильно.
WaitForSingleObject - для ожидания,
QueryPerformanceFrequency - Количество итераций процессора в секунду
QueryPerformanceCounter - текущее число итераций процессора

QueryPerformanceFrequency в начале получаешь количество итераций. После в начале и конце таймера таймера вызываешь QueryPerformanceCounter. Разницу делишь на результат QueryPerformanceFrequency и получаешь время работы кода в секунду. И уже отдаешь в WaitForSingleObject рассчитанное время ожидания.

редакция от ZblCoder, 16.12.2016 12:35

Bullet Heaven:Не участвую.
Zer0
Avatar пользователя

Опубликовано 18.12.2016 21:30 (8 лет назад)    #
sleep(1) - чаще всего разблокировать main thread для приема системных событий
Bullet Heaven:Не участвую.
Страница 2 из 3 < 1 2 3 >
Перейти на форум:
Конкурсы
Открытые конкурсы:
Bullet Heaven

Старт: 23 ноября 2024г.
Финиш: 4 декабря 2024г.

Участники: 4
Недавние конкурсы:
 186 - Strategy
 185 - RPG XII
 184 - Arcade II
 183 - Novel
 182 - RPG XI
 Все конкурсы
Случайная игра
Мини-чат
Вам необходимо залогиниться.

Архив чата

26,204,462 уникальных посетителей

Создано на базе русской версии PHP-Fusion copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.