[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Ответ на ЛС
serg-kkzДата: Понедельник, 13.01.2020, 18:53 | Сообщение # 1
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Код

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()


ООП  -  
 
  • Страница 1 из 1
  • 1
Поиск: