[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум Panda3D - по русски » Panda3D » Для начинающих » Создание коллизии (Создание коллизии)
Создание коллизии
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
Всем привет. Вопросец про коллизии и вообще.
Только недавно начал почитывать мануал Панды. Но как водится хочется попробовать все и сразу happy

Ясное дело самый интересный пример про бегающего по рельефной карте ральфа.

Решил попробовать тупо подкинуть ему свою карту. Для теста сделал в блендере 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 } и Ральф побег biggrin

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

Про тайлинг конечно дремучий лес для меня, но по крайней мере буду знать что так и делается) Вспоминается редактор, например для 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 }

Но почему-то Ральф зараза бегать не хочет dry

 
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. Не побежал. Вот я в этот файл и добавил свой тэг. Но то же не пашет.
 
Форум Panda3D - по русски » Panda3D » Для начинающих » Создание коллизии (Создание коллизии)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: