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