def __init__(self,
                 scene,
                 suncgDatasetRoot,
                 size=(512, 512),
                 mode='offscreen',
                 zNear=0.1,
                 zFar=1000.0,
                 fov=40.0,
                 cameraTransform=None):

        # Off-screen buffers are not supported in OSX
        if sys.platform == 'darwin':
            mode = 'onscreen'

        super(Panda3dSemanticsRenderer, self).__init__()

        self.__dict__.update(scene=scene,
                             suncgDatasetRoot=suncgDatasetRoot,
                             size=size,
                             mode=mode,
                             zNear=zNear,
                             zFar=zFar,
                             fov=fov,
                             cameraTransform=cameraTransform)

        self.categoryMapping = ModelCategoryMapping(
            os.path.join(self.suncgDatasetRoot, 'metadata',
                         'ModelCategoryMapping.csv'))

        self.cameraMask = BitMask32.bit(1)
        self.graphicsEngine = GraphicsEngine.getGlobalPtr()
        self.loader = Loader.getGlobalPtr()
        self.graphicsEngine.setDefaultLoader(self.loader)

        self._initModels()

        selection = GraphicsPipeSelection.getGlobalPtr()
        self.pipe = selection.makeDefaultPipe()
        logger.debug('Using %s' % (self.pipe.getInterfaceName()))

        # Attach a camera to every agent in the scene
        self.cameras = []
        for agentNp in self.scene.scene.findAllMatches('**/agents/agent*'):
            camera = agentNp.attachNewNode(ModelNode('camera-semantics'))
            if self.cameraTransform is not None:
                camera.setTransform(cameraTransform)
            camera.node().setPreserveTransform(ModelNode.PTLocal)
            self.cameras.append(camera)

            # Reparent node below the existing physic node (if any)
            physicsNp = agentNp.find('**/physics')
            if not physicsNp.isEmpty():
                camera.reparentTo(physicsNp)

        self.rgbBuffers = dict()
        self.rgbTextures = dict()

        self._initRgbCapture()

        self.scene.worlds['render-semantics'] = self
    def __init__(self, base):
        self.base = base
        self.loader = PandaLoader.getGlobalPtr()

        self.hook = "async_loader_%s" % (Loader.loaderIndex)
        Loader.loaderIndex += 1
        self.accept(self.hook, self.__gotAsyncObject)
示例#3
0
    def __init__(self, base):
        self.base = base
        self.loader = PandaLoader.getGlobalPtr()

        self.hook = "async_loader_%s" % (Loader.loaderIndex)
        Loader.loaderIndex += 1
        self.accept(self.hook, self.__gotAsyncObject)
示例#4
0
def loadModel(modelPath):
    loader = Loader.getGlobalPtr()
    loaderOptions = LoaderOptions()
    node = loader.loadSync(Filename(modelPath), loaderOptions)
    if node is not None:
        nodePath = NodePath(node)
        nodePath.setTag('model-filename', os.path.abspath(modelPath))
    else:
        raise IOError('Could not load model file: %s' % (modelPath))
    return nodePath
示例#5
0
    def __init__(self, base):
        self.base = base
        self.loader = PandaLoader.getGlobalPtr()

        self._requests = {}

        self.hook = "async_loader_%s" % (Loader.loaderIndex)
        Loader.loaderIndex += 1
        self.accept(self.hook, self.__gotAsyncObject)

        self._loadPythonFileTypes()
    def __init__(self):
        DirectObject.__init__(self)

        self.loader = Loader.getGlobalPtr()

        self.modelPool = {}

        self.requests = {}

        self.asyncRequestDoneEvent = self.getUniqueName() + '-asyncRequestDone'
        self.accept(self.asyncRequestDoneEvent, self.__handleAsyncRequestDone)
示例#7
0
    def __init__(self):
        DirectObject.__init__(self)

        self.loader = Loader.getGlobalPtr()

        self.modelPool = {}

        self.requests = {}

        self.asyncRequestDoneEvent = self.getUniqueName() + '-asyncRequestDone'
        self.accept(self.asyncRequestDoneEvent, self.__handleAsyncRequestDone)
示例#8
0
def loadModel(modelPath):
    loader = Loader.getGlobalPtr()
    # NOTE: disable disk and RAM caching to avoid filling memory when loading multiple scenes
    loaderOptions = LoaderOptions(LoaderOptions.LF_no_cache)
    node = loader.loadSync(Filename(modelPath), loaderOptions)
    if node is not None:
        nodePath = NodePath(node)
        nodePath.setTag('model-filename', os.path.abspath(modelPath))
    else:
        raise IOError('Could not load model file: %s' % (modelPath))
    return nodePath
示例#9
0
    def __init__(self, base):
        self.base = base
        self.loader = PandaLoader.getGlobalPtr()

        self._requests = {}

        self.hook = "async_loader_%s" % (Loader.loaderIndex)
        Loader.loaderIndex += 1
        self.accept(self.hook, self.__gotAsyncObject)

        if ConfigVariableBool('loader-support-entry-points', True):
            self._loadPythonFileTypes()
示例#10
0
class Loader(object):
    ## TODO:
    #
    # Make Loader than can load models and textures:
    #
    # PandaLoader.loadAsync
    # TexturePool.loadTexture
    panda_loader = PandaLoader.getGlobalPtr()
    texture_loader = TexturePool
    load_model = panda_loader.loadSync
    load_texture = texture_loader.loadTexture
    loadSync = load_model
    loadModel = load_model
示例#11
0
    def __init__(self, scene, size=(512, 512), shadowing=False, mode='offscreen', zNear=0.1, zFar=1000.0, fov=40.0,
                 depth=True, modelLightsInfo=None, cameraTransform=None):

        # Off-screen buffers are not supported in OSX
        if sys.platform == 'darwin':
            mode = 'onscreen'

        super(Panda3dRenderer, self).__init__()

        self.__dict__.update(scene=scene, size=size, mode=mode, zNear=zNear, zFar=zFar, fov=fov,
                             depth=depth, shadowing=shadowing, modelLightsInfo=modelLightsInfo,
                             cameraTransform=cameraTransform)

        self.cameraMask = BitMask32.bit(0)
        self.graphicsEngine = GraphicsEngine.getGlobalPtr()
        self.loader = Loader.getGlobalPtr()
        self.graphicsEngine.setDefaultLoader(self.loader)

        # Change some scene attributes for rendering
        self.scene.scene.setAttrib(RescaleNormalAttrib.makeDefault())
        self.scene.scene.setTwoSided(0)

        self._initModels()

        selection = GraphicsPipeSelection.getGlobalPtr()
        self.pipe = selection.makeDefaultPipe()
        logger.debug('Using %s' % (self.pipe.getInterfaceName()))

        # Attach a camera to every agent in the scene
        self.cameras = []
        for agentNp in self.scene.scene.findAllMatches('**/agents/agent*'):
            camera = agentNp.attachNewNode(ModelNode('camera-rgbd'))
            if self.cameraTransform is not None:
                camera.setTransform(cameraTransform)
            camera.node().setPreserveTransform(ModelNode.PTLocal)
            self.cameras.append(camera)

        self.rgbBuffers = dict()
        self.rgbTextures = dict()
        self.depthBuffers = dict()
        self.depthTextures = dict()

        self._initRgbCapture()
        if self.depth:
            self._initDepthCapture()

        self._addDefaultLighting()

        self.scene.worlds['render'] = self
示例#12
0
from panda3d.core import Loader, NodePath, CharacterJoint, PartBundle, AnimBundle, AnimGroup, PartGroup, AnimChannelACMatrixSwitchType
from panda3d.core import GeomVertexReader, InternalName, TransformBlend, TransformBlendTable, Vec3, Vec2, GeomVertexArrayFormat
from panda3d.core import TransformState, Mat4, Filename, AnimBundleNode, JointVertexTransform

import math
import os

loader = Loader.getGlobalPtr()


def loadModel(path):
    return NodePath(loader.loadSync(path))


unknown = 0


def getUnknownName():
    global unknown
    name = "unknown{0}".format(unknown)
    unknown += 1
    return name


def boneFrameString(boneId, pos, rot):
    return "{0}  {1:.6f} {2:.6f} {3:.6f}  {4:.6f} {5:.6f} {6:.6f}\n".format(
        boneId, pos[0], pos[1], pos[2], rot[0], rot[1], rot[2])


FLT_EPSILON = 1e-5