NodePath
|
|
dis_node | Дата: Пятница, 25.03.2011, 20:39 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| Метод showBounds () показывает что BoundingVolume конкретно смещен относительно геометрии. Есть методы регенерации (типа "хоп и он на месте") или нужно выравнивать вручную? getTightBounds() - где-нить документируется ? У BoundingVolume вроде нет методов возвращающих координаты, откуда че цепляется ?
Сообщение отредактировал dis_node - Пятница, 25.03.2011, 20:41 |
|
| |
ninth | Дата: Суббота, 26.03.2011, 11:05 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Можешь скрин дать или пример модельки? Я с таким не сталкивался. Было как-то надо вернуть центр нода в геометрический центр - я пользовался вот такой процедуркой. pt1,pt2 = np.getTightBounds() gcenter = (pt1+pt2)*0.5 gcenter = gcenter - np.getPos() np.setPos(-gcenter) np.flattenLight() np.setPos(gcenter) Есть ещё calcTightBounds, но возвращаемые результаты вроде не отличаются. В чём различия кроме способа вызова - я х.з. p1,p2 = Point3(), Point3() np.calcTightBounds(p1,p2) print p1,p2 p1,p2 = np.getTightBounds() print p1,p2
|
|
| |
dis_node | Дата: Суббота, 26.03.2011, 20:25 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| проглядел, есь forceRecomputeBounds () np.setPos(-gcenter) - перемещает весь узел (не отдельно центр, отдельно геометрию) т.е. смещение так и останется. np.flattenLight() - переводит трансформации непосредственно в координаты? если calcTightBounds(p1,p2) и getTightBounds() - одно и тоже вторая наверно устарела, как и мануал)
Сообщение отредактировал dis_node - Суббота, 26.03.2011, 20:44 |
|
| |
ninth | Дата: Воскресенье, 27.03.2011, 00:26 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Quote (dis_node) смещение так и останется. Да, но геометрический центр узла помещается в координаты (0,0,0). После этого flattenLight применяет текущие трансформации (смещение, масштаб, поворот) непосредственно к вершинам, а трансформации самого узла обнуляются. В конце объект возвращается на место. Побочным эффектом является обнуление масштаба и поворота, точнее не обнуление, а перенос этого дела на вершины, но для меня это было не критичным. А вообще задача флаттенов - уменьшение количества операций трансформации узла -> увеличение производительности. флаттенСтронг вроде ещё и геометрию объединяет, уменьшая кол-во узлов, но точно не скажу - не экспериментировал.
|
|
| |
dis_node | Дата: Воскресенье, 27.03.2011, 00:59 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| forceRecomputeBounds(), flattenLight() - не проканало
Сообщение отредактировал dis_node - Воскресенье, 27.03.2011, 16:32 |
|
| |
ninth | Дата: Воскресенье, 27.03.2011, 16:39 | Сообщение # 6 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Попробуй использовать getTightBounds() и showTightBounds() А вообще что за финт c пустым TextNode для генерации плоского фрейма? Обычно для этого используют CardMaker Code cm = CardMaker('zzz') cm.setFrame(0.0,0.3,0.0,0.3) cmnp = aspect2d.attachNewNode(cm.generate()) cmnp.setTexture(loader.loadTexture('control_template.png')) cmnp.showBounds()
|
|
| |
dis_node | Дата: Воскресенье, 27.03.2011, 23:36 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| Сделал так, но после принудительной установки вроде отрубается автоматический пересчет. ... p1,p2=Point3(),Point3() temp_np=NodePath(lblImg) temp_np.flattenStrong() temp_np.calcTightBounds(p1,p2) bv=BoundingBox(p 1,p2) lblImg.setBounds(bv) ... TextNode не только для фрейма, но и для текста - элемент гуя 'метка' (lable). PGItem это уже надстройка, без прямого доступа к тексту и текстуре, реакция на события здесь не нужна.
|
|
| |
ninth | Дата: Понедельник, 28.03.2011, 08:06 | Сообщение # 8 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Да, по-идее отрубится. Но зачем тебе его ещё и так устанавливать, если TightBounds даёт то, что нужно? Или ты что-то хочешь на это привязать кроме получения размеров?
|
|
| |
dis_node | Дата: Понедельник, 28.03.2011, 22:52 | Сообщение # 9 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| Здесь - ничего, но в целом напрягает что криво висит и наверняка где-нить эта хрень всплывет. В идеале нужно типовое решение типа 'встретил-пофиксил-забыл' или не дожидаясь огульно переустанавливать.
|
|
| |
dis_node | Дата: Суббота, 02.04.2011, 13:38 | Сообщение # 10 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| Опять BoundingVolume Bounds - БВ Автоматический - auto Принудительная установка - handl Локальный объем - intrnl Я устанавливал БВ TextNode'ов тремя способами, как видно из рисунка. 1. В случае auto и intrnl режимов, БВ соответствует только тексту. При выходе БВ за пределы обзора картинка все еще видна. Каким образом БВ участвует в отсечении невидимых объектов ? 2. При использовании оъекта для инициалзации PGButton, в случае автоматичского объема активные зоны (область клика) общитываются отдельно для текста и картинки. В случае предустановленного объема активная зона общая. Как быть если графика не пересекается, а активные зоны пересекаются, гуи-элементы должны всегда быть параллельны осям? Какой принцип определения активной зоны? Активная зона - синяя рамка, первый рисунок. 3. Для handl режима, при смещении объекта на 1.0 становится заметным не пропорциональное смещение БВ, пересчет не помог, в чем ошибка? При этом активная зона общитывается корректно. setBounds() не полностью отключает автоматтический пересчет, масштаб меняется при трансформации (поворот). Код следующим постом.
Сообщение отредактировал dis_node - Суббота, 02.04.2011, 13:50 |
|
| |
dis_node | Дата: Суббота, 02.04.2011, 13:44 | Сообщение # 11 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| Кодец
Сообщение отредактировал dis_node - Воскресенье, 03.04.2011, 00:46 |
|
| |
ninth | Дата: Суббота, 02.04.2011, 15:09 | Сообщение # 12 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| В архиве test_TextNode2 скомпиленный (pyc) поэтому посмотреть не могу. Для ручного БВ попробуй после установки поставить setFinal(1) По процессу рендеринга я, к сожалению знаю не больше чем написано в мануале, поэтому как он рендерит при выходе из БВ сказать не могу. Есть у меня подозрение, что он смотрит на БВ каждого чайлда отдельно.
|
|
| |
dis_node | Дата: Воскресенье, 03.04.2011, 00:48 | Сообщение # 13 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| перезалил (там же) setFinal(1) -устанавливал, никакого эффекта. Получается у TextNode'аРоль родительский БВ может быть меньше объекта в целом, мож это особенность. Как с составными моделями (типа актера), экспериментил ?
Сообщение отредактировал dis_node - Воскресенье, 03.04.2011, 01:05 |
|
| |
ninth | Дата: Воскресенье, 03.04.2011, 16:06 | Сообщение # 14 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Попробуй так ll = self.np.getRelativePoint(aspect2d,ll) ur = self.np.getRelativePoint(aspect2d,ur)
|
|
| |