Game Dev флудилка
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Вопросы по Mesh

Участников: 3

Перейти вниз

Вопросы по Mesh Empty Вопросы по Mesh

Сообщение автор Pyro338 Пн Янв 15, 2018 1:19 pm

Кто нибудь работал с Мешами в Point JS? Что-то у меня ничего приличного не выходит. Вот например у меня есть массив:

Код:
OOP.forArr(shapes[shape_id], function (string, y) {
    OOP.forArr(string, function (cell, x) {
      if (x > 0 && y > 0) {
        if (cell == '1') {
          let block = game.newRectObject({
            x          : x * blocksize - blocksize,
            y          : y * blocksize - blocksize,
            w          : blocksize,
            h          : blocksize,
            fillColor  : colors[shape_id],
            strokeColor: '#000',
            strokeWidth: 1,
          });
          generated_shape.push(block);
        }
      }
    });
  });

Далее мне нужно сделать из него 2 меши:

Код:

for (var key in generated_shape) {
    next_shape[key] = generated_shape[key];
  }
  next_mesh = game.newMesh({
    add: next_shape
  });

/**/

for (var key in generated_shape) {
      current_shape[key] = generated_shape[key];
    }
current_mesh = game.newMesh({
    add: current_shape
  });

все хорошо. но если я пытаюсь установить их в нужные мне позиции

Код:
current_mesh.move(point(center_offset, 0));
  next_mesh.move(point(margin_left_small, 0));

или

Код:
current_mesh.setPosition(point(center_offset, 0));
  next_mesh.setPosition(point(margin_left_small, 0));

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

и еще вопрос: я вызываю функцию поворота меши:

Код:
function rotate() {
  current_mesh.turn(90);
}

всё ок. меш повернулась. но если я вызываю потом функцию движения

Код:
function moveDown() {
  current_mesh.move(point(0, blocksize));
}

меш сдвигается, но обратно становится в свой первоначальный угол наклона. почему так? причем если вывести в консоль current_mesh.angle, то там отображается адекватное значение угла. есть советiк?
Pyro338
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 38
Откуда : Ставрополь

http://pyro338.ru/

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор raingo Пн Янв 15, 2018 2:50 pm

Обычно там где есть меши, там есть и матрицы. В pointjs есть матрицы преобразования?

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Pyro338 Пн Янв 15, 2018 2:51 pm

не припомню, чтобы где-то на них натыкался в АПИ или уроках или на форуме
Pyro338
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 38
Откуда : Ставрополь

http://pyro338.ru/

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор raingo Пн Янв 15, 2018 3:00 pm

пиро пишет:то первая меш становится в нужную позицию, а вторая улетает черти-куда. я подозреваю, что относительно первой меши, а не относительно нуля. но я же специально передавал объекты по значению, а не по ссылке, чтобы избежать этого! так почему одна меш цепляет другую?
Очень правильно подметил. Каждая вершина объекта в 3d рассчитывается относительно самой себе. Т.е. каждый объект сам для себя начало координат. Иначе никак. Такая механика.

Чтобы объекты существовали друг с другом в одной вселенной используются матрицы преобразования, которые условно говорят, где тут начало координат и рассчитывают объект типа от начала. Сливая меши, ты сливаешь их матрицы. И наоборот. Второй объект скорее всего рассчитывается по матрице первого. Хз, яж не видел.

Я хз зачем сканер делал меши для 2d. Видимо был какой- план капкан. Если матриц нет, то тебе нужно самому найти формулу, которая преобразовывает неправильную ротацию, скейл и позицию в правильные. И делать это в методах объекта.

Формула будет зависеть от первого объекта. Т.е. от позиции второго объекта нужно отнимать позицию первого объекта, чтобы узнать где начало координат. Т.о. ты передвинешь объект правильно.

Это довольно муторная фигня. Надеюсь кто поопытнее подскажет что там с матрицами в поинте.

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Pyro338 Пн Янв 15, 2018 3:05 pm

ну я подозреваю, что начало координат берется от начала экранных координат, а не от начала координат какого-то другого меша, потому как

Код:
current_mesh = game.newMesh({
    add: current_shape
  });

идентично

Код:
current_mesh = game.newMesh({
x: 0,
y: 0,
    add: current_shape
  });

иначе вообще зачем это всё?

Я хз зачем сканер делал меши для 2d.
на самом деле много для чего можно было бы их использовать. например у тебя персонаж - меш, а рука с оружием, туловище и ноги - отдельные браши. так было бы (забыл слово) ну типа проще там санимировать, оружие поменять или что-то типа того
Pyro338
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 38
Откуда : Ставрополь

http://pyro338.ru/

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор raingo Пн Янв 15, 2018 3:30 pm

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

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор raingo Пн Янв 15, 2018 3:34 pm

Позиция первого объекта: x: 100.
Позиция второго объекта: х: 40.

Но второй объект рассчитывается так, будто начало координат в точке x:100. Его реально положение получается: х: 140. Чтобы узнать правильное положение, тебе нужно от "x" второго объекта вычесть "x" первого.

X = x2 - x1 = 100- 40 = -60.

-60 и будет верная координата. Матрицы по сути и занимаются вот такими преобразованиями. Если матриц нет - это делается вручную.

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Pyro338 Пн Янв 15, 2018 3:36 pm

второй объект рассчитывается так, будто начало координат в точке x:100

но какого хрена? при чем тут первый объект вообще? откуда эта ересь взялась? нахера второй объект установил свой ноль в ноль первого?
Pyro338
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 38
Откуда : Ставрополь

http://pyro338.ru/

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор raingo Пн Янв 15, 2018 3:42 pm

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

Вот оказывается где лежит api.

Попробуй при создании второго меша вставить туда x, y, angle первого объекта. Может поможет.

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор raingo Пн Янв 15, 2018 3:48 pm

А не, вряд ли поможет. x, y и angle это простые числа, они по ссылке не передаются.

raingo
Отдел прокрастинации

Сообщения : 756
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Pyro338 Пн Янв 15, 2018 3:54 pm

ладно. спасибо.
Pyro338
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 38
Откуда : Ставрополь

http://pyro338.ru/

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Dessan Чт Фев 08, 2018 6:25 am

Может я не понял вопрос,но с Mesh мы ещё год назад выясняли и правили движок. Сканер специально переделывал функционал, потому что у меня Mesh отрабатывал с миганием анимации, тогда он выпустил версию 0,1,0 уже исправленную.
А делал я вот так:
Спойлер:

100% я где-то пропустил скобки, где-то скопировал не всё что надо, где-то наоборот лишнее, но смысл ты уловишь. Главное написать, что именно идёт в mesh, задать координаты и потом играться с visibility = true или false.

Dessan
Юный падаван

Сообщения : 426
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Pyro338 Чт Фев 08, 2018 9:18 am

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

ну да фиг с ним. я уже по другому сделал - без мешей
Pyro338
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 38
Откуда : Ставрополь

http://pyro338.ru/

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Dessan Чт Фев 08, 2018 1:37 pm

У меня тоже было 3 меша и я так же вписывал им свойства visible при необходимости и координаты так же как я и привёл в примере кода. Всё идентично и у меня всё работало. Другое дело - может так никто не делает и есть другие методы для этого, но у меня вроде как работало нормально.

Dessan
Юный падаван

Сообщения : 426
Дата регистрации : 2017-12-25

Вернуться к началу Перейти вниз

Вопросы по Mesh Empty Re: Вопросы по Mesh

Сообщение автор Pyro338 Чт Фев 08, 2018 1:40 pm

ну хз. уже нет желания к этому возвращаться
Pyro338
Pyro338
Админ

Сообщения : 587
Дата регистрации : 2017-12-25
Возраст : 38
Откуда : Ставрополь

http://pyro338.ru/

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения