def renderView(self, camera_pos, light_sources,
blur, blending, spher=True, default_bg_setting=True):
self.setCameraPosition(camera_pos[0],
math.radians(camera_pos[1]),
math.radians(camera_pos[2]))
self.activateLightSources(light_sources, spher)
base.graphicsEngine.renderFrame()
tex = base.win.getScreenshot()
im = self.textureToImage(tex)
if self.generate_depth is True:
depth_im = PNMImage()
self.depth_tex.store(depth_im)
depth_map = np.zeros([self.resolution,
self.resolution], dtype='float')
for i in range(0, self.resolution):
for j in range(0, self.resolution):
depth_val = depth_im.getGray(j, i)
depth_map[i, j] = self.far_plane * self.near_plane /\
(self.far_plane - depth_val *
(self.far_plane - self.near_plane))
depth_map[i, j] = depth_map[i, j] / self.far_plane
dm_uint = np.round(depth_map * self.max_16bit_val).astype('uint16')
if self.replace_background is True and default_bg_setting is True:
mask = (dm_uint == self.max_16bit_val)
temp = np.multiply(
mask.astype(dtype=np.float32).reshape(
self.resolution, self.resolution, 1), im)
im = im - temp
blurred_mask = scipy.ndimage.gaussian_filter(
mask.astype(dtype=np.float32), blending)
inv_mask = (blurred_mask - 1)*(-1)
bg_ind = random.randint(0, len(self.backgrounds)-1)
im = np.multiply(
self.backgrounds[bg_ind],
blurred_mask.reshape(self.resolution, self.resolution, 1)) + \
np.multiply(im, inv_mask.reshape(self.resolution,
self.resolution, 1))
im = scipy.ndimage.gaussian_filter(im, sigma=blur)
im = im.astype(dtype=np.uint8)
self.deactivateLightSources()
return im, dm_uint
评论列表
文章目录