Код
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from panda3d.core import *
CurPicker = CollisionTraverser() #Создание конвейра
CurPicker.showCollisions(render)
CurPickerOr = CollisionHandlerQueue() #Очередь столкновений
CurPickerNod = CollisionNode('mouseRay') #нод для луча
CurPickerCam = camera.attachNewNode(CurPickerNod) #закрепляем нод на камере
CurPickerNod.setFromCollideMask(BitMask32.bit(1)) # устанавливаем маску
CurPickerNod.setIntoCollideMask(BitMask32.allOff()) # отключаем проверку колииззии с иными масками
CurPickerRay = CollisionRay() #Создаём луч
CurPickerNod.addSolid(CurPickerRay) #прикрепляем луч к ноду
CurPicker.addCollider(CurPickerCam, CurPickerOr) # вносим в конвеер
Object = loader.loadModel("panda") # загружаем модель
Object.reparentTo(render) # Прицепляем модель к ноду
Object.setPos(0, 50, 0) # Устанавливаем координаты
Object.setCollideMask(BitMask32.bit(1)) # Устанавливаем ноду маску как у луча.
def Pick():
if base.mouseWatcherNode.hasMouse(): # делаем проверку в окне ли курсор(мышь).
mpos = base.mouseWatcherNode.getMouse() # получаем координаты курсора.
CurPickerRay.setFromLens(base.camNode, mpos.getX(), mpos.getY()) # уставливаем их лучу.
CurPicker.traverse(render) # запуск проверки коллизий(луча с объектами).
CurPickerOr.sortEntries() # сортируем что бы получить ближний объект.
if (CurPickerOr.getNumEntries() > 0): # проверяем есть ли пересечения луча с полигонами объекта.
info = CurPickerOr.getEntry(0) # получаем информацию по первому полигону.
print (info.getSurfacePoint(render))
base.accept('mouse1',Pick) # событие нажатия кнопки мыши и запуск функции Pick.
base.run()