def projectBackground(self): if not self.backgroundChooserView.isBackgroundShowing(): gui3d.app.prompt("Warning", "You need to load a background for the current view before you can project it.", "OK") return mesh = self.human.getSeedMesh() # for all quads, project vertex to screen # if one vertex falls in bg rect, project screen quad into uv quad # warp image region into texture ((x0,y0,z0), (x1,y1,z1)) = self.backgroundImage.mesh.calcBBox() camera = mh.cameras[self.backgroundImage.mesh.cameraMode] x0, y0, _ = camera.convertToScreen(x0, y0, z0, self.backgroundImage.mesh) x1, y1, _ = camera.convertToScreen(x1, y1, z1, self.backgroundImage.mesh) leftTop = (x0, y1) rightBottom = (x1, y0) dstImg = projection.mapImage(self.backgroundImage, mesh, leftTop, rightBottom) texPath = mh.getPath('data/skins/projection.png') if os.path.isfile(texPath): oldImg = mh.Image(texPath) else: oldImg = None gui3d.app.do(ProjectionAction("Change projected background texture", self.human.getTexture(), texPath, oldImg, dstImg)) log.debug("Enabling shadeless rendering on body") self.shadelessButton.setChecked(True) self.human.setShadeless(1) mh.redraw()
def projectBackground(self): if not self.backgroundImage.isVisible(): gui3d.app.prompt("Warning", "You need to load a background before you can project it.", "OK") return mesh = gui3d.app.selectedHuman.getSeedMesh() # for all quads, project vertex to screen # if one vertex falls in bg rect, project screen quad into uv quad # warp image region into texture ((x0, y0, z0), (x1, y1, z1)) = self.backgroundImage.mesh.calcBBox() camera = mh.cameras[self.backgroundImage.mesh.cameraMode] x0, y0, _ = camera.convertToScreen(x0, y0, z0, self.backgroundImage.mesh) x1, y1, _ = camera.convertToScreen(x1, y1, z1, self.backgroundImage.mesh) leftTop = (x0, y1) rightBottom = (x1, y0) dstImg = projection.mapImage(self.backgroundImage, mesh, leftTop, rightBottom) dstImg.save(os.path.join(mh.getPath(""), "data", "skins", "projection.png")) gui3d.app.selectedHuman.setTexture(os.path.join(mh.getPath(""), "data", "skins", "projection.png"))