forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Jam Session 7 (http://forum.boolean.name/forumdisplay.php?f=174)
-   -   Angry Snowmans (http://forum.boolean.name/showthread.php?t=20139)

RegIon 05.01.2016 23:25

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




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

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

http://playcanv.as/p/G6Bwg1Sx

moka 06.01.2016 03:49

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

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

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

Стрельба с перезарядкой - очень как-то странная механика :)

RegIon 06.01.2016 10:54

Ответ: Angry Snowmans
 
Спасибо, сделал проще:
Цитата:

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

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

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




Предложите, как сделать поиск пути на такой карте. kD дерево строить на основании расположения объектов и ландшафта или как?
Пока придумывается сделать навмеш в редакторе и по нему искать, а деревья и т.д уже учитывать в астаре или еще где.

moka 06.01.2016 20:01

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

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

RegIon 06.01.2016 20:16

Ответ: Angry Snowmans
 
Цитата:

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

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

Ну А* по чему-то строить нужно, вот графом и будет навмеш - ребра и вершины, расстояние - вес.

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

moka 07.01.2016 01:53

Ответ: Angry Snowmans
 
Цитата:

Сообщение от RegIon (Сообщение 303148)
moka, я что-то не пойму как получить треугольники (вершины и грани) меша. VertexBuffer нашёл, а как получить какая вершина с какой связана ?

Есть два буфера, VertexBuffer и IndexBuffer. Тебе нужно оба. Первый имеет позиции и данные вершин, второй указывает индексы вершин из VertexBuffer'а триплетами (трианглы).

RegIon 07.01.2016 10:57

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

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

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

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

http://developer.playcanvas.com/en/a...transformPoint

moka 07.01.2016 13:33

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

Для итерации через каждый треугольник, если сам не разберешься, то пример может смогу сделать, но попозже.

RegIon 07.01.2016 19:17

Ответ: Angry Snowmans
 
moka, я что-то не так делаю? Почему повернуто?
Главное с обычными примитивами правильно работает.
Трансформации тоже не получаются почему-то.
http://playcanv.as/p/ZeRzg8M3

moka 07.01.2016 20:10

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

В общем замени 21 строку в navmesh.js на:
PHP код:

var transform this.entity.model.model.meshInstances[0].node.getWorldTransform(); 


RegIon 07.01.2016 23:30

Ответ: 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, я если что, редактировать разрешил тебе, все равно кроме тебя тут никто не разбирается в этом.

moka 08.01.2016 01:29

Ответ: Angry Snowmans
 
Цитата:

Сообщение от RegIon (Сообщение 303201)
Код:

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 не совсем понял.
А на счет числа вершин, там на самом деле не просто. Дело в том что вершинный индекс может быть один, и шариться между разными мешами и индексными буферами.
Следственно число нод в твоем случае нужно считать по числу уникальных индексов в индексном буфере у меша.

RegIon 08.01.2016 08:36

Ответ: Angry Snowmans
 
Цитата:

Сообщение от moka (Сообщение 303205)
Про pushOnes не совсем понял.
А на счет числа вершин, там на самом деле не просто. Дело в том что вершинный индекс может быть один, и шариться между разными мешами и индексными буферами.
Следственно число нод в твоем случае нужно считать по числу уникальных индексов в индексном буфере у меша.

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

Т.е если даже у меня 1 меш с 70 вершинами, но несколько индексных буферов, то может случится так, что их станет больше?
UPD: посмотрел что хранится в индексном буфере:


какого фига так? сначала вообще подряд шли, не должно быть. Сетка должна быть и должны дублироваться.
Вроде делаю как тут

UPD: теперь вообще сделал как в генерации коллизион модели, вершин (нодов) как было 262, так и осталось, куча дубликатов, либо я идиот, либо с индексным буфером что-то не так.

UPD: Все, я сдаюсь, я запутался. Нельзя просто так взять и восстановить набор вершин и связей между вершинами. Теперь, если объединяешь вершины с одинаковой позицией, то вершин становится 54 вместо 70 а дочерних вершин всего 1,а должно быть не менее 2. Все плохо.
Я понял. Это вроде как глюк экспортера. Я скачал json-меш, в нем по порядку идут индексы и получается 300 треугольников, вместо 100. Вот такая петрушка, причем весь огород в такой петрушке.

Dave'a потрепать на счет этого хотел уже, только май англисш из бед, и не смогу все правильно выразить.

Выдрал кусок из него:
PHP код:

... "type":"triangles","base":0,"count":300}] 



Раскидаю по карте пустые объекты вручную и сам вручную назначу связи. Быстрее будет.

moka 08.01.2016 18:02

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

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

RegIon 09.01.2016 19:24

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

ТЫЦ


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

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

Просто охота знать причину такой разницы.


Часовой пояс GMT +4, время: 16:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot