Создание коллизии
|
|
HunterSK | Дата: Суббота, 28.02.2009, 18:47 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 36
Награды: 0
Репутация: 0
Статус: Offline
| Как её состряпать для определённого объекта?ы?
Рэп прёт и не е";?:"т.....Рэперам Респект
|
|
| |
ninth | Дата: Суббота, 28.02.2009, 22:21 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Посмотри демки и соседние ветки форума - уже обсуждалось
|
|
| |
HunterSK | Дата: Суббота, 28.02.2009, 22:26 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 36
Награды: 0
Репутация: 0
Статус: Offline
| Нигде нет, а пример я смотрел, голову ап стол сломал так и ничё не получилось
Рэп прёт и не е";?:"т.....Рэперам Респект
|
|
| |
ninth | Дата: Суббота, 28.02.2009, 23:38 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Для начала - для одного объекта не получится сделать коллизию, т.к. он должен ещё с чем-то коллидиться. Поэтому объектов с коллизиями должно быть не менее 2-х. А вообще объясни что именно хочешь.
|
|
| |
HunterSK | Дата: Воскресенье, 01.03.2009, 04:14 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 36
Награды: 0
Репутация: 0
Статус: Offline
| Эт я понимаю, хочу чтобы актёр не мог проходить свозь стены дома
Рэп прёт и не е";?:"т.....Рэперам Респект
|
|
| |
ninth | Дата: Воскресенье, 01.03.2009, 16:10 | Сообщение # 6 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Ну дык в фпс демке как раз то, что тебе нужно вот строки, кторые отвечают за создание коллизий со стенами base.cTrav = CollisionTraverser() base.pusher = CollisionHandlerPusher() cn = CollisionNode('player') cn.addSolid(CollisionSphere(0,0,0,3)) solid = self.node.attachNewNode(cn) base.cTrav.addCollider(solid,base.pusher) base.pusher.addCollider(solid,self.node, base.drive.node())
|
|
| |
ninth | Дата: Воскресенье, 01.03.2009, 16:14 | Сообщение # 7 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Если недостаточно, вот пример отдельно с пушером Code import direct.directbase.DirectStart from pandac.PandaModules import * from direct.interval.IntervalGlobal import *
#initialize traverser base.cTrav = CollisionTraverser()
#initialize pusher pusher = CollisionHandlerPusher()
#########
#load a model. reparent it to the camera so we can move it. smiley = loader.loadModel('smiley') smiley.reparentTo(camera) smiley.setPos(0, 25.5,0.5)
#create a collision solid for this model cNode = CollisionNode('smiley') cNode.addSolid(CollisionSphere(0,0,0,1.1)) smileyC = smiley.attachNewNode(cNode) smileyC.show()
#########
#load a model frowney = loader.loadModel('frowney') frowney.reparentTo(render) frowney.setPos(5, 25,0)
#create a collsion solid for this model cNode = CollisionNode('frowney') cNode.addSolid(CollisionSphere(0,0,0,1.1)) frowneyC = frowney.attachNewNode(cNode) frowneyC.show()
######### #add collision node to the traverser and the pusher
base.cTrav.addCollider(frowneyC,pusher) pusher.addCollider(frowneyC,frowney, base.drive.node())
#########
#have the one ball moving to help show what is happening frowney.posInterval(5,Point3(5,25,0),startPos=Point3(-5,25,0),fluid=1).loop()
#run the world. move around with the mouse to see how the moving ball changes #course to avoid the one attached to the camera.
run()
|
|
| |
HunterSK | Дата: Воскресенье, 01.03.2009, 18:03 | Сообщение # 8 |
Сержант
Группа: Пользователи
Сообщений: 36
Награды: 0
Репутация: 0
Статус: Offline
| спс) отрезвею, проверим)
Рэп прёт и не е";?:"т.....Рэперам Респект
|
|
| |
ILIUS | Дата: Суббота, 07.03.2009, 22:17 | Сообщение # 9 |
Сержант
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 1
Статус: Offline
| Всем привет. Вопросец про коллизии и вообще. Только недавно начал почитывать мануал Панды. Но как водится хочется попробовать все и сразу Ясное дело самый интересный пример про бегающего по рельефной карте ральфа. Решил попробовать тупо подкинуть ему свою карту. Для теста сделал в блендере Plane и назвал terrain в центре добавил пустой Mesh и обозвал его start_point. Запускается но не желает бегать и никаких коллизий не определяет судя по всему. Там есть такой вот важный кусочек: Code for i in range(self.ralphGroundHandler.getNumEntries()): entry = self.ralphGroundHandler.getEntry(i) entries.append(entry) Так вот entry ничем не заполняется. Подскажите если не лень. Хотя если отправите читать дальше мануал пойму)) А еще вопрос впринципе, как рисуют большие ландшафты? Как текстурируют? Unwrap-ом и делают огромную текстуру? смысла нет наверно. А если пытаюсь просто материалом сделать и на него текстуру пустить, то она в egg не идет. Как сделать что-то типа тайлов? В общем, я и моделить не мастак, отсюда и вопросы... Так просто вобщем интересуюсь)
|
|
| |
ninth | Дата: Суббота, 07.03.2009, 23:33 | Сообщение # 10 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| скорее всего твоя проблема в этом: # This environment model contains collision meshes. If you look # in the egg file, you will see the following: # # <Collide> { Polyset keep descend } # # This tag causes the following mesh to be converted to a collision # mesh -- a mesh which is optimized for collision, not rendering. # It also keeps the original mesh, so there are now two copies --- # one optimized for rendering, one for collisions. Ландшафты как правило тайлятся. Делаешь развёртку, но так что б каждый квад меша был полностью на текстуру, а не анврап в обычном смысле.
|
|
| |
ILIUS | Дата: Воскресенье, 08.03.2009, 13:52 | Сообщение # 11 |
Сержант
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 1
Статус: Offline
| В точку. Добавил <Collide> { Polyset keep descend } и Ральф побег А только вручную добавлять или можно как-то при моделировании добавить? Хотя по идее если глобально делать, то должен быть редактор локаций свой, там и учитывать. А по мелочи можно и вручную. Про тайлинг конечно дремучий лес для меня, но по крайней мере буду знать что так и делается) Вспоминается редактор, например для NWN. Там действительно логика четко по тайлам...
|
|
| |
ninth | Дата: Воскресенье, 08.03.2009, 16:14 | Сообщение # 12 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| В доке к экспортёру Chicken есть инфа как свои теги добавалять
|
|
| |
ILIUS | Дата: Понедельник, 09.03.2009, 00:02 | Сообщение # 13 |
Сержант
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 1
Статус: Offline
| Спасибо. Надо почитать. Уже наверно не в тему начинаю совсем) Нашел туториал неплохой по созданию левелов на блендере. Ну и другие там есть забавные... http://otothecleaner.free.fr/tutoria....-1.html Добавлено (09.03.2009, 00:02) --------------------------------------------- Продолжаем разбираться) Почитал доку чикена. Все ок добавляется. Но пришлось <Collide> { Polyset keep descend } заменить на <ObjectType> { egg-object-type-ground } соответственно в C:\Panda3D-1.5.4\etc\Confauto.prc добавил строку: egg-object-type-ground <Collide> { Polyset keep descend } Но почему-то Ральф зараза бегать не хочет
|
|
| |
ninth | Дата: Понедельник, 09.03.2009, 14:56 | Сообщение # 14 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| попробуй egg-object-type-barrier тэги описаны в файле etc/Confauto.prc
|
|
| |
ILIUS | Дата: Понедельник, 09.03.2009, 15:29 | Сообщение # 15 |
Сержант
Группа: Проверенные
Сообщений: 24
Награды: 0
Репутация: 1
Статус: Offline
| Пробовал и barrier. Не побежал. Вот я в этот файл и добавил свой тэг. Но то же не пашет.
|
|
| |