|
Jam Session 7 Тема - Выживание. Ответственный: XoreX |
05.01.2016, 23:25
|
#16
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
moka, можешь поведать как расчитывается нормаль столкновения?
А то что-то какой-то капец:
сам скрипт:
https://playcanvas.com/editor/code/3...let_control.js
Ентити льдых повернуты на 90, что бы был по направлению -z (вперед)
Можете побегать и пострелять льдышками:
http://playcanv.as/p/G6Bwg1Sx
|
(Offline)
|
|
06.01.2016, 03:49
|
#17
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Angry Snowmans
Хм. В первую очередь выглядит что иногда пули пролетают сквозь, скорее всего тело пули очень маленькое, и за отсутствием SSD у физики они успевают пролететь между тиками.
Вообще реализовать коллизию с ландшафтом аналитически на самом деле весьма не сложно, я еще во времена блица на блице свой ландшафт писал, там весьма простая математика была.
Также выглядит что нормаль иногда идет в одну сторону, а иногда в другую. Как буд-то кто с кем коллизится меняется местами, если это так, то проверь с кем была коллизия, если с ландшафтом, то инвертируй вектор, или наоборот.
Стрельба с перезарядкой - очень как-то странная механика
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.01.2016, 10:54
|
#18
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
Спасибо, сделал проще:
normal = Sign(normal.dot(vector.UP)) * normal
|
Т.е инвертирую нормаль, если она смотрит вниз, а не вверх. Так как перпендикуляров нет - работает.
Плохо что нельзя менять UP,FORWARD,RIGHT вектора у энтити, часа 2 ушло на разбирание с кватернионами (узнать вращение между векторами)
Новый скрин. Такой пушки у игрока не будет, но пока побегать можно:
Предложите, как сделать поиск пути на такой карте. kD дерево строить на основании расположения объектов и ландшафта или как?
Пока придумывается сделать навмеш в редакторе и по нему искать, а деревья и т.д уже учитывать в астаре или еще где.
|
(Offline)
|
|
06.01.2016, 20:01
|
#19
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Angry Snowmans
Да, с математикой порой нужно разбираться. Но зато когда разобрался раз и другой, уже с квартерионами и векторами будет в будущем проще.
Я бы туда сразу А* херачил бы, заместо смесей со всякими навмешами.
Можно конечно и навмеш, а обход деревьев уже сделать аналитически по ситуации.
|
(Offline)
|
|
06.01.2016, 20:16
|
#20
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
Сообщение от moka
Да, с математикой порой нужно разбираться. Но зато когда разобрался раз и другой, уже с квартерионами и векторами будет в будущем проще.
Я бы туда сразу А* херачил бы, заместо смесей со всякими навмешами.
Можно конечно и навмеш, а обход деревьев уже сделать аналитически по ситуации.
|
Ну А* по чему-то строить нужно, вот графом и будет навмеш - ребра и вершины, расстояние - вес.
moka, я что-то не пойму как получить треугольники (вершины и грани) меша. VertexBuffer нашёл, а как получить какая вершина с какой связана ?
Последний раз редактировалось RegIon, 06.01.2016 в 21:36.
|
(Offline)
|
|
07.01.2016, 01:53
|
#21
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Angry Snowmans
Сообщение от RegIon
moka, я что-то не пойму как получить треугольники (вершины и грани) меша. VertexBuffer нашёл, а как получить какая вершина с какой связана ?
|
Есть два буфера, VertexBuffer и IndexBuffer. Тебе нужно оба. Первый имеет позиции и данные вершин, второй указывает индексы вершин из VertexBuffer'а триплетами (трианглы).
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.01.2016, 10:57
|
#22
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
я так понимаю, что бы узнать, как у меня расположены атрибуты в буфере, нужно получить vertexFormat? или есть строго типизированный вид атрибутов, типа:
x,y,z nx, ny, nz, tu, tv ... и т.д, которые постоянны при импорте
Спрашиваю, что бы сильно не заморачиватся с этим.
А для трансформации вершинной координаты в глобалную, нужно подействовать матрицей трансформации entity, с которого сняли эту вершину, так получается?
И тут возник вопрос:
Чем отличается transformPoint от transformVector ?
http://developer.playcanvas.com/en/a...transformPoint
|
(Offline)
|
|
07.01.2016, 13:33
|
#23
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Angry Snowmans
transformPoint также смещает позицию исходя из матрицы + крутит + масштабирует, когда transformVector лишь крутит и масштабирует.
Для итерации через каждый треугольник, если сам не разберешься, то пример может смогу сделать, но попозже.
|
(Offline)
|
|
07.01.2016, 19:17
|
#24
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
moka, я что-то не так делаю? Почему повернуто?
Главное с обычными примитивами правильно работает.
Трансформации тоже не получаются почему-то.
http://playcanv.as/p/ZeRzg8M3
|
(Offline)
|
|
07.01.2016, 20:10
|
#25
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Angry Snowmans
Трансофрмацию нужно использовать самого меша а не объекта, т.к. каждый meshInstance - по сути child объект (node), и имеет свою дополнительную трансформацию.
В общем замени 21 строку в navmesh.js на:
var transform = this.entity.model.model.meshInstances[0].node.getWorldTransform();
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.01.2016, 23:30
|
#26
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
Array.prototype.pushOnes = function(e) {
if(e && this.indexOf(e)==-1)
return this.push(e);
return this.length;
};
Так же в JS канает? а то что-то срабатывает без фильтрации, а тут сказанно что строгое сравнение.
не работает тут:
https://playcanvas.com/editor/code/371981/navmesh.js
в getNearNodes получаются дублированные ноды. И да, я не понимаю почкему они там вообще могут быть, так как массив нодов должен быть = количеству вершин, которые не дублируются (проверил в модели - дублей нет, но вершин 70, а PC говорит что 262, схрена ли?)
moka, я если что, редактировать разрешил тебе, все равно кроме тебя тут никто не разбирается в этом.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.01.2016, 01:29
|
#27
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Angry Snowmans
Сообщение от RegIon
Array.prototype.pushOnes = function(e) {
if(e && this.indexOf(e)==-1)
return this.push(e);
return this.length;
};
Так же в JS канает? а то что-то срабатывает без фильтрации, а тут сказанно что строгое сравнение.
не работает тут:
https://playcanvas.com/editor/code/371981/navmesh.js
в getNearNodes получаются дублированные ноды. И да, я не понимаю почкему они там вообще могут быть, так как массив нодов должен быть = количеству вершин, которые не дублируются (проверил в модели - дублей нет, но вершин 70, а PC говорит что 262, схрена ли?)
moka, я если что, редактировать разрешил тебе, все равно кроме тебя тут никто не разбирается в этом.
|
Про pushOnes не совсем понял.
А на счет числа вершин, там на самом деле не просто. Дело в том что вершинный индекс может быть один, и шариться между разными мешами и индексными буферами.
Следственно число нод в твоем случае нужно считать по числу уникальных индексов в индексном буфере у меша.
|
(Offline)
|
|
08.01.2016, 08:36
|
#28
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
Сообщение от moka
Про pushOnes не совсем понял.
А на счет числа вершин, там на самом деле не просто. Дело в том что вершинный индекс может быть один, и шариться между разными мешами и индексными буферами.
Следственно число нод в твоем случае нужно считать по числу уникальных индексов в индексном буфере у меша.
|
Ну я просто добавил в Array метод, который не должен добавлять, если такой объект уже есть. Грешил что он не работает.
Т.е если даже у меня 1 меш с 70 вершинами, но несколько индексных буферов, то может случится так, что их станет больше?
UPD: посмотрел что хранится в индексном буфере:
какого фига так? сначала вообще подряд шли, не должно быть. Сетка должна быть и должны дублироваться.
Вроде делаю как тут
UPD: теперь вообще сделал как в генерации коллизион модели, вершин (нодов) как было 262, так и осталось, куча дубликатов, либо я идиот, либо с индексным буфером что-то не так.
UPD: Все, я сдаюсь, я запутался. Нельзя просто так взять и восстановить набор вершин и связей между вершинами. Теперь, если объединяешь вершины с одинаковой позицией, то вершин становится 54 вместо 70 а дочерних вершин всего 1,а должно быть не менее 2. Все плохо.
Я понял. Это вроде как глюк экспортера. Я скачал json-меш, в нем по порядку идут индексы и получается 300 треугольников, вместо 100. Вот такая петрушка, причем весь огород в такой петрушке.
Dave'a потрепать на счет этого хотел уже, только май англисш из бед, и не смогу все правильно выразить.
Выдрал кусок из него:
... "type":"triangles","base":0,"count":300}]
Раскидаю по карте пустые объекты вручную и сам вручную назначу связи. Быстрее будет.
Последний раз редактировалось RegIon, 08.01.2016 в 10:23.
|
(Offline)
|
|
08.01.2016, 18:02
|
#29
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Angry Snowmans
В максе можно разбить вершины на группы сглаживания и материалы - и да, будут разные вершины.
А если все одной группой и одним материалом, то в FBX будет засунуто самое оптимальное. Наш экспортер не модифицирует данные буферов из FBX'а.
Ну и ты ведь можешь построить мелкий индекс вершин, проверять на их близость и переиспользовать, чтобы избежать дубликатов при генерации нав меша.
|
(Offline)
|
|
09.01.2016, 19:24
|
#30
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Angry Snowmans
Тадам! Глобальное обновление.- Добавил тупое AI у ботов, теперь они могут кататься и преследовать игрока.
- Так же их можно убить (за 20 выстрелов примерно) и они могут убить вас (за 5 ударов).
- Если стрелять в бота, то с кокой-то вероятностью он сагрится.
Проблемы поиска пути так и не решил, подскажите как нормально это реализовать? (навмеш отпадает)
ТЫЦ
Последний раз редактировалось RegIon, 10.01.2016 в 21:18.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:29.
|