Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Активизм > Форумные конкурсы > Jam Session 7

Jam Session 7 Тема - Выживание. Ответственный: XoreX

Ответ
 
Опции темы
Старый 05.01.2016, 20:25   #16
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Angry Snowmans

moka, можешь поведать как расчитывается нормаль столкновения?
А то что-то какой-то капец:




сам скрипт:
https://playcanvas.com/editor/code/3...let_control.js

Ентити льдых повернуты на 90, что бы был по направлению -z (вперед)
Можете побегать и пострелять льдышками:

http://playcanv.as/p/G6Bwg1Sx
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 06.01.2016, 00:49   #17
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Angry Snowmans

Хм. В первую очередь выглядит что иногда пули пролетают сквозь, скорее всего тело пули очень маленькое, и за отсутствием SSD у физики они успевают пролететь между тиками.

Вообще реализовать коллизию с ландшафтом аналитически на самом деле весьма не сложно, я еще во времена блица на блице свой ландшафт писал, там весьма простая математика была.

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

Стрельба с перезарядкой - очень как-то странная механика
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RegIon (06.01.2016)
Старый 06.01.2016, 07:54   #18
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Angry Snowmans

Спасибо, сделал проще:
normal = Sign(normal.dot(vector.UP)) * normal
Т.е инвертирую нормаль, если она смотрит вниз, а не вверх. Так как перпендикуляров нет - работает.

Плохо что нельзя менять UP,FORWARD,RIGHT вектора у энтити, часа 2 ушло на разбирание с кватернионами (узнать вращение между векторами)

Новый скрин. Такой пушки у игрока не будет, но пока побегать можно:




Предложите, как сделать поиск пути на такой карте. kD дерево строить на основании расположения объектов и ландшафта или как?
Пока придумывается сделать навмеш в редакторе и по нему искать, а деревья и т.д уже учитывать в астаре или еще где.
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 06.01.2016, 17:01   #19
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Angry Snowmans

Да, с математикой порой нужно разбираться. Но зато когда разобрался раз и другой, уже с квартерионами и векторами будет в будущем проще.

Я бы туда сразу А* херачил бы, заместо смесей со всякими навмешами.
Можно конечно и навмеш, а обход деревьев уже сделать аналитически по ситуации.
(Offline)
 
Ответить с цитированием
Старый 06.01.2016, 17:16   #20
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Angry Snowmans

Сообщение от moka Посмотреть сообщение
Да, с математикой порой нужно разбираться. Но зато когда разобрался раз и другой, уже с квартерионами и векторами будет в будущем проще.

Я бы туда сразу А* херачил бы, заместо смесей со всякими навмешами.
Можно конечно и навмеш, а обход деревьев уже сделать аналитически по ситуации.
Ну А* по чему-то строить нужно, вот графом и будет навмеш - ребра и вершины, расстояние - вес.

moka, я что-то не пойму как получить треугольники (вершины и грани) меша. VertexBuffer нашёл, а как получить какая вершина с какой связана ?
__________________
Сайт: http://iexpo.ml

Последний раз редактировалось RegIon, 06.01.2016 в 18:36.
(Offline)
 
Ответить с цитированием
Старый 06.01.2016, 22:53   #21
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Angry Snowmans

Сообщение от RegIon Посмотреть сообщение
moka, я что-то не пойму как получить треугольники (вершины и грани) меша. VertexBuffer нашёл, а как получить какая вершина с какой связана ?
Есть два буфера, VertexBuffer и IndexBuffer. Тебе нужно оба. Первый имеет позиции и данные вершин, второй указывает индексы вершин из VertexBuffer'а триплетами (трианглы).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RegIon (07.01.2016)
Старый 07.01.2016, 07:57   #22
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Angry Snowmans

я так понимаю, что бы узнать, как у меня расположены атрибуты в буфере, нужно получить vertexFormat? или есть строго типизированный вид атрибутов, типа:
x,y,z nx, ny, nz, tu, tv ... и т.д, которые постоянны при импорте

Спрашиваю, что бы сильно не заморачиватся с этим.

А для трансформации вершинной координаты в глобалную, нужно подействовать матрицей трансформации entity, с которого сняли эту вершину, так получается?

И тут возник вопрос:
Чем отличается transformPoint от transformVector ?

http://developer.playcanvas.com/en/a...transformPoint
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 07.01.2016, 10:33   #23
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Angry Snowmans

transformPoint также смещает позицию исходя из матрицы + крутит + масштабирует, когда transformVector лишь крутит и масштабирует.

Для итерации через каждый треугольник, если сам не разберешься, то пример может смогу сделать, но попозже.
(Offline)
 
Ответить с цитированием
Старый 07.01.2016, 16:17   #24
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Angry Snowmans

moka, я что-то не так делаю? Почему повернуто?
Главное с обычными примитивами правильно работает.
Трансформации тоже не получаются почему-то.
http://playcanv.as/p/ZeRzg8M3
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 07.01.2016, 17:10   #25
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Angry Snowmans

Трансофрмацию нужно использовать самого меша а не объекта, т.к. каждый meshInstance - по сути child объект (node), и имеет свою дополнительную трансформацию.

В общем замени 21 строку в navmesh.js на:
var transform this.entity.model.model.meshInstances[0].node.getWorldTransform(); 
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RegIon (07.01.2016)
Старый 07.01.2016, 20:30   #26
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 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, я если что, редактировать разрешил тебе, все равно кроме тебя тут никто не разбирается в этом.
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (07.01.2016)
Старый 07.01.2016, 22:29   #27
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: 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, 05:36   #28
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 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}] 


Раскидаю по карте пустые объекты вручную и сам вручную назначу связи. Быстрее будет.
__________________
Сайт: http://iexpo.ml

Последний раз редактировалось RegIon, 08.01.2016 в 07:23.
(Offline)
 
Ответить с цитированием
Старый 08.01.2016, 15:02   #29
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Angry Snowmans

В максе можно разбить вершины на группы сглаживания и материалы - и да, будут разные вершины.
А если все одной группой и одним материалом, то в FBX будет засунуто самое оптимальное. Наш экспортер не модифицирует данные буферов из FBX'а.

Ну и ты ведь можешь построить мелкий индекс вершин, проверять на их близость и переиспользовать, чтобы избежать дубликатов при генерации нав меша.
(Offline)
 
Ответить с цитированием
Старый 09.01.2016, 16:24   #30
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,156
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Angry Snowmans

Тадам! Глобальное обновление.
  • Добавил тупое AI у ботов, теперь они могут кататься и преследовать игрока.
  • Так же их можно убить (за 20 выстрелов примерно) и они могут убить вас (за 5 ударов).
  • Если стрелять в бота, то с кокой-то вероятностью он сагрится.
Проблемы поиска пути так и не решил, подскажите как нормально это реализовать? (навмеш отпадает)

ТЫЦ


почему вот БананаБреад у меня на компе с максимальным фпс(60), на максимальном разрешении, а PlayCanvas(ну и не только он) на сценах проще дико лагает?

https://developer.mozilla.org/ru/dem...il/bananabread

Просто охота знать причину такой разницы.
__________________
Сайт: http://iexpo.ml

Последний раз редактировалось RegIon, 10.01.2016 в 18:18.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 00:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com