взять координаты объекта
|
|
ninth | Дата: Понедельник, 24.06.2013, 14:38 | Сообщение # 31 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| 1. Без примера - я вряд ли что-то скажу. Надо смотреть 2. Можешь ссылку дать где это на форуме обсуждается?
|
|
| |
akzy | Дата: Понедельник, 24.06.2013, 20:24 | Сообщение # 32 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 3
Статус: Offline
| *имел ввиду,что начал искать похожие вопросы на форуме, если не найду, открою тему. Код прикреплён. Заранее извиняюсь за кривость и неорганизованность. На текущий момент не понимаю, почему при удалении и создании ноды коллизии, её координаты остаются прежними (кнопка b) , так же со временем падает производительность... судя по производительности, основной затык у меня сейчас с коллизиями (можно сделать кучу кубиков кнопкой g,это не сильно повлияет на работу, но стоит включить коллизии, всё падает с 600 до 120 fps)
Сообщение отредактировал akzy - Понедельник, 24.06.2013, 23:08 |
|
| |
ninth | Дата: Вторник, 25.06.2013, 11:54 | Сообщение # 33 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Во-первых, процедура collider2 у тебя создаёт помимо куба и луча много ещё чего интересного: CollisionTraverser, CollisionHandlerQueue, mouseTask2 а удаляешь ты только куб и луч, забыв удалить и почистить всё остальное. соответственно оно пытается продолжать работать. Вообще тебе не надо каждый раз создавать collider2 целиком - достаточно пересоздать cnpquad в нужном месте или вообще просто передвинуть его. Это что касалось падения производительности со временем. т.е. в идеале у тебя вся процедура выглядит так: Код def addcube(self): self.collider.cnpquad.setPos(self.x,self.y,self.z)
Цитата (akzy) почему при удалении и создании ноды коллизии, её координаты остаются прежними Здесь я вижу две ошибки: 1. Ты сам вместо того чтобы создать стандартный куб и потом сместить его в нужную позицию, - смещаешь вершины куба, а центр модели остаётся в 0 0 0. Не знаю насколько понятно объяснил. Если не понятно могу попробовать нарисовать что происходит. Хотя в данном случае в принципе это не влияет на твой алгоритм, т.к. ты учитываешь не позицию задетектенного куба, а точку и нормаль коллизии. 2. Неправильное округление в updxyz. Ты округляешь позицию до десятков, а не до единиц т.е. любая цифра меньше 5.0 превращается в 0.
Теперь к фпсам - это довольно хитрая штука. Вычисление коллизий конечно довольно прожорливая операция сама по себе, но тут ещё пара моментов делают то, что называется "у страха глаза велики" Фпсы - не линейная величина. Т.е. при 500 фпсах разница в 1 фпс - это 0.002 секунды процессорного времени, а при 100 фпсах - это уже 0.01 секунды. Это было раз, а два - смотри что происходит - чем больше фпсов, тем чаще вызывается у тебя процедура расчёта коллизий и тем больше суммарно времени на неё тратится. В данном случае есть смысл попробовать вместо автоматического base.cTrav использовать свой траверсер и вызывать его скажем 10-20 раз в секунду через taskMgr.doMethodLater и task.again
|
|
| |
akzy | Дата: Среда, 26.06.2013, 12:05 | Сообщение # 34 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 3
Статус: Offline
| Насчёт коллизий в отдельную задачу, да, чтото не догадался сразу, сделал проверку 10 раз в секунду, фпс вырос значительно (~2-3 раза) насчёт первой ошибки- возможно чтото пропустил опять, но почему при показываемых координатах грани например -1, куб ставится в 0?то есть в начале подвожу курсор к левой грани, координата х=0, жму b, куб смещается, двигаю мышку на ту же грань, координата -1, жму b, нет реакции, тк координата берётся не -1 а 0... пойду ещё почитаю... Округляется у меня до единиц и всё работает. По крайней мере в выводе значений всё отображается нормально. Может мне мои скрины выложить? ps чтобы куб смещать, целиком,. его прицепить к ноде?
Сообщение отредактировал akzy - Среда, 26.06.2013, 12:08 |
|
| |
ninth | Дата: Среда, 26.06.2013, 17:29 | Сообщение # 35 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Твой код Код self.x=round(self.collider.acp[0],-1)+self.nx self.y=round(self.collider.acp[1],-1)+self.ny self.z=round(self.collider.acp[2],-1)+self.nz В каком месте здесь округление до единиц? Или это может у меня какой-то особый питон? Код >>> round(4.5, -1) 0.0 >>> round(5.5, -1) 10.0 >>> round(-1, -1) -0.0
Цитата (akzy) ps чтобы куб смещать, целиком,. его прицепить к ноде? В предыдущем посте показан рабочий пример addcube - просто попробуй его в своём коде
|
|
| |
akzy | Дата: Среда, 26.06.2013, 17:36 | Сообщение # 36 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 3
Статус: Offline
| попробовал, вот скриншоты на каждом курсор на левой грани ps картинки справа налево идут
Сообщение отредактировал akzy - Среда, 26.06.2013, 17:37 |
|
| |
ninth | Дата: Среда, 26.06.2013, 17:54 | Сообщение # 37 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| К чему эти скрины? Я не совсем понял. Про рабочий пример - я говорил о том как смещать куб целиком, тем не менее до этого я сказал, что Цитата (ninth) в данном случае в принципе это не влияет на твой алгоритм .
С твоим алгоритмом ошибка в округлении. Т.е. либо поправь округление, либо считай тогда по позиции куба.
|
|
| |
akzy | Дата: Среда, 26.06.2013, 22:07 | Сообщение # 38 |
Лейтенант
Группа: Пользователи
Сообщений: 55
Награды: 0
Репутация: 3
Статус: Offline
| да, сейчас сделал пару тестов, ошибку нашёл. working out...
|
|
| |