def gen_image(alpha, dist): Rcam = np.eye(3); s.setObjectPosition('camera', vec3(0,0,-dist)); s.setObjectAttitude('camera', MatToQuat(Rcam)); s.setObjectPosition('sun', pos_sun); s.setObjectPosition('asteroid', pos_target); R_ast = np.eye(3); R_ast = QuatToMat(quat(vec3(0,0,1), pi/2)) @ R_ast; R_ast = QuatToMat(quat(vec3(1,0,0), (90-11)/180*pi)) @ R_ast; R_ast = QuatToMat(quat(vec3(0,1,0), -alpha-pi/3)) @ R_ast; s.setObjectAttitude('asteroid', MatToQuat(R_ast)); s.render(); im = s.getImageGray32F(); ## Color imageRGBA = s.getImageRGBA8() # discards the alpha channel: r,g,b,a = Image.fromarray(imageRGBA).split() imageRGB = Image.merge("RGB", (r, g, b)) im = imageRGB; im.save('images/' + 'ceres' + '_' + str(it).zfill(4) +'.png') # plot.ioff() plot.imshow(im, aspect='equal', interpolation='none', cmap='gray'); plot.draw() plot.pause(0.01)
def gen_image(alpha, beta): Rcam = np.eye(3) s.setObjectPosition('camera', vec3(0, 0, 0)) s.setObjectAttitude('camera', MatToQuat(Rcam)) s.setObjectPosition('sun', pos_sun) s.setObjectPosition('asteroid', pos_target) R_ast = np.eye(3) R_ast = QuatToMat(quat(vec3(1, 0, 0), pi / 2)) @ R_ast R_ast = QuatToMat(quat(vec3(0, 1, 0), -pi / 2)) @ R_ast R_ast = QuatToMat(quat(vec3(0, 1, 0), -pi / 8)) @ R_ast R_ast = QuatToMat(quat(vec3(0, 0, 1), pi / 4)) @ R_ast R_ast = QuatToMat(quat(vec3(1, 0, 0), -pi / 3)) @ R_ast R_ast = QuatToMat(quat(vec3(0, 1, 0), -pi / 5)) @ R_ast s.setObjectAttitude('asteroid', MatToQuat(R_ast)) s.render()
def __setup_backend(self, DEM_filename="FullMoon.dem", texture_filename="lroc_color_poles.tiff"): self.backend = setup_renderer(fov=self.fov, resolution=self.resolution) self.backend.createBRDF('sun', 'sun.brdf', {}) self.backend.createShape('sun', 'sphere.shp', {'radius': SUN_RADIUS}) self.backend.createBody('sun', 'sun', 'sun', []) self.backend.setObjectPosition('sun', self.sun_pos * 1e3) self.backend.createBRDF("mate", "mate.brdf", {}) self.backend.createShape("earth_shape", "sphere.shp", {'radius': EARTH_RADIUS}) self.backend.createBody("earth", "earth_shape", "mate", ["earth.jpg"]) self.backend.setObjectPosition('earth', self.earth_pos * 1e3) self.backend.createBRDF('hapke', 'hapke.brdf', {}) self.backend.createSphericalDEM('moon', DEM_filename, 'hapke', texture_filename) self.backend.setObjectElementBRDF('moon', 'moon', 'hapke') self.backend.setObjectAttitude('moon', np.array([0, 0, 0, 1])) self.backend.setObjectPosition('moon', (0, 0, 0)) self.backend.setObjectAttitude('moon', quat(vec3(1, 0, 0), 0)) self.backend.setObjectAttitude('moon', Rotation.from_euler('z', np.pi, degrees=False).as_quat())
target = 'HAYABUSA' et1 = spiceypy.utc2et(et1Str) frame = 'ITOKAWA_FIXED' center = 'ITOKAWA' state1 = spiceypy.spkezr(target, spiceypy.utc2et(et1Str), frame, 'none', center)[0] stateSun = spiceypy.spkezr('SUN', spiceypy.utc2et(et1Str), frame, 'none', center)[0] frame2 = 'HAYABUSA_AMICA' frame1 = 'ITOKAWA_FIXED' rot1 = spiceypy.pxform(frame1, frame2, et1) quat1 = spiceypy.m2q(rot1) # SPICE data are in km s.setObjectPosition( 'camera', vec3(state1[0] * 1000, state1[1] * 1000, state1[2] * 1000)) # opposite convetion is used between SurRender and JPL s.setObjectAttitude('camera', vec4(quat1[0], -quat1[1], -quat1[2], -quat1[3])) # SPICE data are in km s.setObjectPosition( 'sun', vec3(stateSun[0] * 1000, stateSun[1] * 1000, stateSun[2] * 1000)) s.setObjectPosition('asteroid', vec3(0, 0, 0)) s.printState(s.getState()) s.render() im = s.getImageGray32F() imgName = os.path.splitext(ntpath.basename(p))[0] + '.png' cv2.imwrite(
(C) 2019 Airbus copyright all rights reserved """ from surrender.surrender_client import surrender_client from surrender.geometry import vec3, vec4, quat, normalize, QuatToMat, MatToQuat, gaussian import numpy as np import matplotlib.pyplot as plot import cv2 from PIL import Image # Constants: sun_radius = 696342000 ua2km = 149597870.700 ua = ua2km * 1000 Rceres = 4.7e5 pi = np.pi pos_sun = normalize(vec3(-4e11,-4e11,-8e11)) * 8e11 pos_target = vec3(0,0,0) # Image setup: fov=5; raytracing=True; N = [512,512]; rays = 16; # set PSF surech_PSF=10; sigma = 1; wPSF = 5; PSF = gaussian(wPSF * surech_PSF, sigma * surech_PSF); ## Initializing SurRender
Moon_radius = 1737400.0; s = surrender_client() s.connectToServer('127.0.0.1', 5151) # A SurRender server must be on s.closeViewer() s.setConventions(s.XYZ_SCALAR_CONVENTION, s.Z_FRONTWARD) s.setImageSize(1024,1024) s.setCameraFOVDeg(70,70) s.setCubeMapSize(512) s.setShadowMapSize(1024) s.createBRDF('sun', 'sun.brdf', {}) s.createShape("sun_shape", "sphere.shp", {'radius' : 1392000000.0 * 0.5}) s.createBody("sun", "sun_shape", "sun", {}) s.setObjectPosition("sun", normalize(vec3(1, 1, 0.1)) * ua) s.createBRDF('raw', 'raw.brdf', {}) s.createBRDF('mate', 'mate.brdf', {}) s.createBRDF('hapke', 'hapke.brdf', {}) info = s.createSphericalDEM('moon', 'FullMoon_demi.dem', 'hapke', 'Kaguya_MI_refl_b2_750nm_global_128ppd.big') CENTER_LATITUDE = (info['MINIMUM_LATITUDE'] + info['MAXIMUM_LATITUDE']) / 2.0 * (pi / 180.0); CENTER_LONGITUDE = (info['WESTERNMOST_LONGITUDE'] + info['EASTERNMOST_LONGITUDE']) / 2.0 * (pi / 180.0); DEM_ref_pos = vec3(cos(CENTER_LONGITUDE) * cos(CENTER_LATITUDE), sin(CENTER_LONGITUDE) * cos(CENTER_LATITUDE), sin(CENTER_LATITUDE)) * info['A_AXIS_RADIUS']; p = pi * ua * ua * 6; s.setSunPower([p,p,p,p])