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()
Ejemplo n.º 3
0
    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
Ejemplo n.º 6
0
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])