Example #1
0
 def _load_scene(self):
     # ratcave instantly creates gl resources so we can't import earlier
     import ratcave as rc
     # Insert filename into WavefrontReader.
     obj_filename = rc.resources.obj_primitives
     obj_reader = rc.WavefrontReader(obj_filename)
     # Create Mesh
     self._monkey = obj_reader.get_mesh("Monkey", scale=.7)
     self._monkey.position.xyz = 0, 0, 0
     self._monkey.uniforms['diffuse'] = 0., 0., 1.
     self._monkey.uniforms['spec_weight'] = 300.
     self._torus = obj_reader.get_mesh("TorusSmooth")
     self._torus.position.xyz = 0, 0, 0
     self._torus.rotation.x = 20
     self._torus.uniforms['diffuse'] = 1., 0., 0.
     self._torus.uniforms['spec_weight'] = 300.
     # Create Scene
     self._scene = rc.Scene(meshes=[self._monkey, self._torus])
     self._scene.light.position.z = 3
     self._scene.light.position.x = 3
     # Prebuild shader
     with rc.default_shader:
         pass
     # mutables
     self._torus_xpos = imgui.Float(0)
     self._cam_angle = imgui.Float(0)
     self._cam_dist = imgui.Float(3)
Example #2
0
    def __init__(self, *args, **kwargs):
        """
        Returns Window with everything needed for doing arena scanning.  Will automatically close when all camera movement
        has completed.
        """
        super(GridScanWindow, self).__init__(*args, **kwargs)

        wavefront_reader = rc.WavefrontReader(rc.resources.obj_primitives)
        self.mesh = wavefront_reader.get_mesh('Grid',
                                              position=[0., 0., -1.],
                                              scale=1.5,
                                              point_size=12,
                                              drawstyle='point')
        self.mesh.uniforms['diffuse'] = [1., 1., 1.]  # Make white
        self.mesh.uniforms['flat_shading'] = True

        self.scene = rc.Scene([self.mesh], bgColor=(0, 0, 0))
        self.scene.camera.ortho_mode = True

        dist = .06
        self.cam_positions = ((dist * np.sin(ang), dist * np.cos(ang), -1)
                              for ang in np.linspace(0, 2 * np.pi, 40)[:-1])

        self.marker_pos = []
        pyglet.clock.schedule(self.detect_projection_point)
        pyglet.clock.schedule(self.move_camera)
Example #3
0
 def __init__(self):
     super(World, self).__init__();
     self.scene = rc.Scene(meshes=[],camera=rc.Camera(orientation0=(0, 0, -1),rotation=(0, 0, 0)))
     self.scene.bgColor = 33, 33, 33
     self.name  = 'World';
     self.objs  = [];
     self.objs_num = len(self.objs);
     self.rules = [];
     self.rules_num = len(self.rules);
     self.size  = 32;
Example #4
0
    def __init__(self,client_sock,server_sock):
    
        #Handling user keyboard inputs
        self.keys = key.KeyStateHandler()
        window.push_handlers(self.keys)

        #Used for reading and handling user inputs
        self.client_sock = client_sock
        self.server_sock = server_sock

        #Default stats label to be displayed
        self.stats = ['Fall Status: False','Fall Distance: Nan']

        # Load Meshes and put into a Scene
        obj_reader = rc.WavefrontReader(rc.resources.obj_primitives)
        self.sphere = obj_reader.get_mesh('Sphere', position=(0, 0, -3),scale=0.3)
        self.torus = obj_reader.get_mesh('Torus', position=(0, 0, -3),scale=0.5)
        self.torus2 = obj_reader.get_mesh('Torus', position=(0, 0, -3),scale=0.5)


        #set up diffuse color for meshes
        self.sphere.uniforms['diffuse'] = [.6, .6, .6]
        self.torus.uniforms['diffuse'] = [1, 0, 0]
        self.torus2.uniforms['diffuse'] = [0, 0, 1]

        #setting up the defaults
        self.azimuth = 0
        self.pitch = 0
        self.roll = 0

        self.vx = 0
        self.vy = 0
        self.vz = 0

        #add meshes to scene
        self.scene = rc.Scene(meshes=[self.sphere,self.torus,self.torus2])

        #set up scene background color
        self.scene.bgColor = 138/255, 113/255, 145/255

        #schdules the update and user input functions to run
        pyglet.clock.schedule_interval(self.update, 1.0/40.0)
        # pyglet.clock.schedule_interval(self.get_recent_valid_data, 1.0/60.0)
        pyglet.clock.schedule(self.user_inputs)

        #used to display animation
        self.begin_animation = False

        #exit game condition
        self.end_game=False
        self.animation_data = []
        self.display_data = Queue()
        self.iter_barrier = threading.Barrier(2)
Example #5
0
    def make_scene(self):

        # Insert filename into WavefrontReader.
        obj_filename = rc.resources.obj_primitives
        obj_reader = rc.WavefrontReader(obj_filename)

        # Create Mesh
        monkey = obj_reader.get_mesh("Monkey")
        monkey.position.xyz = 0, 0, -5

        # Create Scene
        self.scene = rc.Scene(meshes=[monkey], bgColor=(0, 1, 0))
Example #6
0
File: utils.py Project: 3phel/VR1
def load_projected_scene(arena_file, projector_file, motive_client):
    """Scene-building convenience function. Returns (scene, arena, arena_rb) from filenames and motive."""
    arena, arena_rb = get_arena_with_rigidbody(arena_objfilename=arena_file,
                                               motive_client=motive_client)
    beamer = get_beamer_camera(fname=projector_file)
    scene = rc.Scene(meshes=[arena], bgColor=(.6, 0, 0))
    scene.camera.position.xyz = beamer.position.xyz
    scene.camera.rotation.xyz = beamer.rotation.xyz
    scene.camera.projection.fov_y = beamer.projection.fov_y
    scene.camera.projection.aspect = beamer.projection.aspect
    scene.gl_states = scene.gl_states[:-1]
    scene.light.position.xyz = beamer.position.xyz
    return scene, arena, arena_rb
Example #7
0
def view_mesh(body, obj_filename):
    # """Displays mesh in .obj file.  Useful for checking that files are rendering properly."""

    reader = rc.WavefrontReader(obj_filename)
    mesh = reader.get_mesh(body, position=(0, 0, -1))
    print(mesh.vertices.shape)

    mesh.scale.x = .2 / np.ptp(mesh.vertices, axis=0).max()
    camera = rc.Camera(projection=rc.PerspectiveProjection(fov_y=20))
    light = rc.Light(position=(camera.position.xyz))

    scene = rc.Scene(meshes=[mesh],
                     camera=camera,
                     light=light,
                     bgColor=(.2, .4, .2))
    scene.gl_states = scene.gl_states[:-1]

    display = pyglet.window.get_platform().get_default_display()
    screen = display.get_screens()[0]
    window = pyglet.window.Window(fullscreen=True, screen=screen)

    fbo = rc.FBO(rc.Texture(width=4096, height=4096))
    quad = rc.gen_fullscreen_quad()
    quad.texture = fbo.texture

    label = pyglet.text.Label()

    @window.event
    def on_draw():
        with rc.resources.genShader, fbo:
            scene.draw()
        with rc.resources.deferredShader:
            quad.draw()

        verts_mean = np.ptp(mesh.vertices, axis=0)
        label.text = 'Name: {}\nRotation: {}\nSize: {} x {} x {}'.format(
            mesh.name, mesh.rotation, verts_mean[0], verts_mean[1],
            verts_mean[2])
        label.draw()

    @window.event
    def on_resize(width, height):
        camera.projection.aspect = float(width) / height

    @window.event
    def on_mouse_motion(x, y, dx, dy):
        x, y = x / float(window.width) - .5, y / float(window.height) - .5
        mesh.rotation.x = -360 * y
        mesh.rotation.y = 360 * x

    pyglet.app.run()
Example #8
0
    def __init__(self, screenidx=1, color=(1., 1., 1.), scale=0.09, *args, **kwargs):
        display = pyglet.window.get_platform().get_default_display()
        screen = display.get_screens()[screenidx]
        super(DotWindow, self).__init__(screen=screen, *args, **kwargs)

        spheres = gen_spheres(scale=scale, color=color)
        self.scene = rc.Scene(meshes=spheres, bgColor=(0,)*3)
        cam = self.scene.camera
        self.shader = rc.Shader.from_file(*rc.resources.genShader)
        cam.projection = rc.OrthoProjection(origin='center', coords='relative')

        cam.update()

        pyglet.clock.schedule(update_silently)
Example #9
0
    def __init__(self, projector, serial_device, *args, **kwargs):
        super(LatencyDisplayApp, self).__init__(*args, **kwargs)

        self.device = serial_device

        pyglet.clock.schedule(lambda dt: None)

        reader = rc.WavefrontReader(rc.resources.obj_primitives)
        self.dot = reader.get_mesh('Sphere', scale=.02, position=(0, 0, 0))
        self.dot.uniforms['diffuse'] = 1., 0., 0.
        self.dot.uniforms['flat_shading'] = True
        self.scene = rc.Scene(meshes=[self.dot], bgColor=(0., 0., 0.))
        self.scene.camera = projector
        self.scene.camera.projection.aspect = 1.7777
        self.shader3d = rc.Shader.from_file(*rc.resources.genShader)

        self.latency_display = pyglet.text.Label(text='Waiting for Stimulus Switch..', x=0, y=0, font_size=36)
        pyglet.clock.schedule(self.update_latency_display)
Example #10
0
    def __init__(self, *args, **kwargs):
        super(RotationWindow, self).__init__(*args, **kwargs)

        pyglet.clock.schedule(lambda dt: None)

        reader = rc.WavefrontReader(rc.resources.obj_primitives)
        self.mesh = reader.get_mesh('Monkey', scale=.05, position=(0, 0, 0))
        self.mesh.rotation = self.mesh.rotation.to_quaternion()
        self.scene = rc.Scene(meshes=[self.mesh], bgColor=(0., 0., 0.))

        self.fbo = rc.FBO(rc.Texture(width=4096, height=4096))
        self.quad = rc.gen_fullscreen_quad()
        self.quad.texture = self.fbo.texture

        self.label = pyglet.text.Label()

        self.shader3d = rc.Shader.from_file(*rc.resources.genShader)
        self.shaderAA = rc.Shader.from_file(*rc.resources.deferredShader)
Example #11
0
    def __init_window(self, width, height, name):
        self.window = pyglet.window.Window(width=width,
                                           height=height,
                                           caption=name)
        self.world = rc.EmptyEntity(name='world')
        self.world.position.xyz = 0, 0, -2
        self.world.scale = 0.5
        self.grid = self.__make_grid()
        self.scene = rc.Scene(meshes=self.world)
        self.scene.camera.position.xyz = 0, 0, 2
        self.world.rotation.xyz = 45, 45, 0
        self.__reset_drawing()

        #This is called on the draw event
        @self.window.event
        def on_draw():
            with rc.default_shader:
                self.scene.draw()
            [lbl.draw() for lbl in self.labels]
            self.__reset_drawing()

        #This is called during a mouse drag event
        @self.window.event
        def on_mouse_drag(x, y, dx, dy, buttons, modifiers):
            rot_speed = 1.0
            self.world.rotation.y += dx * rot_speed
            self.world.rotation.x -= dy * rot_speed

        #Register keyboard handler
        keys = key.KeyStateHandler()
        self.window.push_handlers(keys)

        def on_key_press(dt):
            camera_speed = 3
            if keys[key.W]:
                self.scene.camera.position.z -= camera_speed * dt
            if keys[key.S]:
                self.scene.camera.position.z += camera_speed * dt
            if keys[key.R]:
                self.scene.camera.position.xyz = 0, 0, 0
                self.world.rotation.xyz = 0, 0, 0

        #Processes key presses on a clock schedule
        pyglet.clock.schedule(on_key_press)
Example #12
0
def load_projected_scene(arena_file, projector_file, motive_client):
    """Scene-building convenience function. Returns (scene, arena, arena_rb) from filenames and motive."""
    arena = rc.WavefrontReader(arena_file).get_mesh('Arena')
    arena.uniforms['diffuse'] = 1., 1, 1
    arena.uniforms['flat_shading'] = False
    arena.rotation = arena.rotation.to_quaternion()

    arena_rb = motive_client.rigid_bodies['Arena']
    arena.position.xyz = arena_rb.position
    arena.rotation.wxyz = arena_rb.quaternion

    scene = rc.Scene(meshes=[arena], bgColor=(.6, 0, 0))
    scene.gl_states = scene.gl_states[:-1]

    beamer = rc.Camera.from_pickle(projector_file)
    scene.camera.position.xyz = beamer.position.xyz
    scene.camera.rotation.xyz = beamer.rotation.xyz
    scene.camera.projection.fov_y = 41.5
    scene.camera.projection.aspect = 1.7778

    scene.light.position.xyz = scene.camera.position.xyz
    return scene, arena, arena_rb
Example #13
0
    def __init__(self, max_points=1000, *args, **kwargs):
        """
        Returns Window with everything needed for doing projector calibration.

        Keyword Args:
            -max_points (int): total number of data points to collect before exiting.

        """
        super(PointScanWindow, self).__init__(*args, **kwargs)

        wavefront_reader = rc.WavefrontReader(rc.resources.obj_primitives)
        self.mesh = wavefront_reader.get_mesh('Sphere', position=[0., 0., -1.], scale=.01)
        self.mesh.uniforms['diffuse'] = [1., 1., 1.]  # Make white
        self.mesh.uniforms['flat_shading'] = True

        self.scene = rc.Scene([self.mesh], bgColor=(0, 0, 0))
        self.scene.camera.ortho_mode = True

        self.max_points = max_points
        self.screen_pos = []
        self.marker_pos = []
        pyglet.clock.schedule(self.detect_projection_point)
        pyglet.clock.schedule(self._close_if_max_points_reached)
Example #14
0
def main():

    FULLSCREEN = True

    reader = rc.WavefrontReader('resources/maze.obj')

    arena = reader.get_mesh('Cube')
    arena.textures.append(rc.Texture.from_image(rc.resources.img_uvgrid))
    sphere = reader.get_mesh('Sphere')  # , position=(0, 0, -1))
    cylinder = reader.get_mesh('Cylinder')  # , position=(0, 0, -1))

    player = rc.Camera(projection=rc.PerspectiveProjection(z_near=.001,
                                                           z_far=4.5),
                       position=(0, .3, 0))
    player.rotation.axes = 'sxyz'

    scene = rc.Scene(meshes=[arena, sphere, cylinder],
                     camera=player,
                     bgColor=(1., 0., 0.))
    #scene.gl_states = scene.gl_states[:-1]

    window = FPSGame(player=player, scene=scene, fullscreen=FULLSCREEN)
    pyglet.app.run()
Example #15
0
            sphere.uniforms = rc.UniformCollection()
        else:
            sphere.uniforms['diffuse']= np.random.random(3)
        sphere.update()
        yield sphere

spheres = [sphere for sphere in sphere_factory(reader, NUM_OBJECTS)]
if IS_MOVING:
    for sphere in spheres:
        sphere.rot_velocity = 45 * np.random.random()

# Debug Text
label_fps = pyglet.text.Label('FPS', font_size=20)

# Create Scenes and FBOs to render onto
proj_scene = rc.Scene(meshes=spheres)
proj_scene.camera.aspect = 1.
proj_scene.camera.fov_y = 90.

god_scene = rc.Scene(meshes=[player, screen])
cubetexture = rc.TextureCube(width=CUBEMAP_TEXTURE_SIZE, height=CUBEMAP_TEXTURE_SIZE)
screen.texture = cubetexture
fbo_cube = rc.FBO(cubetexture)


aaShader = rc.resources.aaShader
aa_texture = rc.Texture()
fbo_aa = rc.FBO(aa_texture)

fullscreen_quad = rc.resources.gen_fullscreen_quad()
fullscreen_quad.texture = aa_texture
Example #16
0
    def __init__(self,
                 arena_objfile,
                 projector_file,
                 fullscreen=True,
                 screen=1,
                 antialiasing=True,
                 vsync=False,
                 fps_mode=False,
                 *args,
                 **kwargs):
        """
        A Pyglet Window that sets up the arena, beamer, and virtual scenes, along with motive update and draw functions
        for updating and rendering a virtual reality environment in a ratCAVE setup.
        """
        self.__display = pyglet.window.get_platform().get_default_display()
        self.__screen = self.__display.get_screens()[screen]
        super(self.__class__, self).__init__(fullscreen=fullscreen,
                                             screen=self.__screen,
                                             vsync=vsync,
                                             *args,
                                             **kwargs)

        self.cube_fbo = rc.FBO(texture=rc.TextureCube(width=4096, height=4096))

        self.arena = rc.WavefrontReader(arena_objfile).get_mesh(
            cfg.ARENA_MESH_NAME)
        self.arena.uniforms['diffuse'] = cfg.ARENA_LIGHTING_DIFFUSE
        self.arena.uniforms['flat_shading'] = cfg.ARENA_LIGHTING_FLAT_SHADING
        self.arena.rotation = self.arena.rotation.to_quaternion()

        self.arena_rb = motive.rigid_bodies[cfg.ARENA_MOTIVE_NAME]
        self.arena.position.xyz = self.arena_rb.position
        self.arena.rotation.wxyz = self.arena_rb.quaternion

        beamer = rc.Camera.from_pickle(projector_file)
        beamer.projection.aspect = 1.77778
        beamer.projection.fov_y = 41.5

        self.active_scene = rc.Scene(meshes=[self.arena],
                                     bgColor=(.6, 0, 0),
                                     camera=beamer)
        self.active_scene.gl_states.states = self.active_scene.gl_states.states[:
                                                                                -1]
        self.active_scene.light.position.xyz = beamer.position.xyz

        self.orig_texture = None

        self.shader = rc.resources.cube_shader
        self._vr_scenes = set()
        self.current_vr_scene = None

        self.rodent_rb = motive.rigid_bodies[cfg.RODENT_MOTIVE_NAME]

        self.antialiasing = antialiasing
        # self.fbo_aa = rc.FBO(rc.Texture(width=4096, height=4096, mipmap=True))
        # self.aa_quad = rc.gen_fullscreen_quad()
        # self.aa_quad.texture = self.fbo_aa.texture
        # self.shader_deferred = rc.Shader.from_file(*rc.resources.deferredShader)

        if fps_mode:
            raise NotImplementedError(
                "Haven't gotten fps_mode to work properly yet.")
        self.fps_mode = fps_mode

        pyglet.clock.schedule(self.update)
    terrain_reader = rc.WavefrontReader(terrain_file)
    # Get terrain mesh
    terrain = get_terrain(terrain_reader, terrain_file)
    # Get tree mesh
    tree_file = "tree.obj"
    tree_render = rc.WavefrontReader(tree_file)

    trees = scatter_randomly(terrain, tree_render, tree_file)
    scene_items.extend(trees)
    scene_items.append(terrain)
    return scene_items


# Create scene
scene_items = build_scene()
scene = rc.Scene(meshes=scene_items)
scene.bgColor = 138 / 255.0, 216 / 255.0, 249 / 255.0

# Set fov of camera for wider view and preventing culling too soon
scene.camera.projection.fov_y = 100.

# Save camera home position, if we want to reset
cam_home = scene.camera.position.xyz


# Allow camera translation using keyboard
def move_camera_with_keys(dt):
    camera_speed = 3
    if keys[key.LEFT]:
        scene.camera.position.x -= camera_speed * dt
    if keys[key.RIGHT]:
Example #18
0
# Inserir o caminho do arquivo do obj
obj_filename2 = path.join('thorFinal.obj')
# Ler o arquivo obj e retorna os pontos
obj_reader = rc.WavefrontReader(obj_filename2)

# Create Mesh
thor = obj_reader.get_mesh("thor")
# Seta a posição inicial, escala, ?
thor.position.xyz = 0, 0, -2
scale = .1
thor.scale = scale
thor.uniforms['diffuse'] = [.5, .0, .8]

# Cria a cena
scene = rc.Scene(meshes=[thor])
scene.bgColor = 0.4, 0.2, 0.4
scene.light.position = 0, 3, -1
# Cria a camera
camera = rc.Camera(projection=rc.PerspectiveProjection(fov_y=90, aspect=1.))
scene.camera = camera
#Faz a projeção da cena
projected_scene = rc.Scene(meshes=[thor], bgColor=(1., 1., 1.))
projected_scene.light.position = scene.light.position
projected_scene.camera = rc.Camera(position=(0, 0, 5), rotation=(0, 0, 0))
projected_scene.camera.projection.z_far = 50


# Atualiza a movimentação da camera e do objeto
def move_camera(dt):
    global scale
Example #19
0
# projector.rot_x = -90
projector.rot_x = rot[0] - 1.
projector.rot_y = rot[1]
projector.rot_z = 180 - rot[2]
# projector._rot_matrix = projdict['rotation']

display = pyglet.window.get_platform().get_default_display()
screen = display.get_screens()[1]
window = pyglet.window.Window(vsync=True, fullscreen=True, screen=screen)

reader = rc.WavefrontReader(rc.resources.obj_primitives)
sphere = reader.get_mesh('Sphere', scale=.01)
sphere.position = rbody.position
print(sphere.uniforms)
sphere.uniforms['flat_shading'] = 1
scene = rc.Scene(meshes=[sphere], bgColor=(0, .02, 0))
scene.camera = projector
scene.light.position = projector.position
label = pyglet.text.Label('FPS', font_size=20)
label_fps = pyglet.text.Label('FPS', font_size=20)
fps_display = pyglet.clock.ClockDisplay()


@window.event
def on_draw():

    sphere.position = rbody.position
    scene.draw()

    # label.draw()
    # label_fps.draw()
Example #20
0
import pyglet
import ratcave as rc
import math, time

window = pyglet.window.Window(resizable=True)

# Assemble the Virtual Scene
obj_reader = rc.WavefrontReader(rc.resources.obj_primitives)
sphere = obj_reader.get_mesh("Sphere", position=(0, 0, 2), scale=0.2)
sphere.uniforms['diffuse'] = 1, 0, 0

cube = obj_reader.get_mesh("Cube", position=(0, 0, 0), scale=0.2)
cube.uniforms['diffuse'] = 1, 1, 0

# virtual_scene = rc.Scene(meshes=[sphere, cube], bgColor=(0., 0., 1.))
virtual_scene = rc.Scene(meshes=[cube, sphere], bgColor=(0., 0., 1.))
virtual_scene.light.position.xyz = 0, 3, -1

cube_camera = rc.Camera(
    projection=rc.PerspectiveProjection(fov_y=90, aspect=1.))
virtual_scene.camera = cube_camera

# Assemble the Projected Scene
monkey = obj_reader.get_mesh("Monkey", position=(0, 0, -1), scale=0.8)
screen = obj_reader.get_mesh("Plane",
                             position=(0, 0, 1),
                             rotation=(1.5, 180, 0))

projected_scene = rc.Scene(meshes=[monkey, screen, sphere, cube],
                           bgColor=(1., .5, 1.))
projected_scene.light.position = virtual_scene.light.position
Example #21
0
window = pyglet.window.Window(resizable=True)
keys = key.KeyStateHandler()
window.push_handlers(keys)

global f
f = 0

# get an object
model_file = rc.resources.obj_primitives
monkey = rc.WavefrontReader("M206v4.obj").get_mesh('Cube', scale=.1)
monkey.position.xyz = 0, 0, -3.5

monkey.uniforms['diffuse'] = [0.255, 0.191, 0.]  # RGB values

scene = rc.Scene(meshes=[monkey])

scene.camera.rotation.x = -15
scene.light.rotation.x = -15


def move_camera(dt):
    camera_speed = 3
    if keys[key.LEFT]:
        scene.camera.position.x -= camera_speed * dt
    if keys[key.RIGHT]:
        scene.camera.position.x += camera_speed * dt
    if keys[key.UP]:
        scene.camera.position.y -= camera_speed * dt
    if keys[key.DOWN]:
        scene.camera.position.y += camera_speed * dt
Example #22
0
cylinder.uniforms['flat_shading'] = True
cylinder.point_size = .02
cylinder.position.x = -.3
cylinder.scale.xyz = .5

cyl2 = cylinder.copy()
cyl2.position.x = 0
# cyl2.rotation.x = 20

cyl3 = cylinder.copy()
cyl3.position.x = .3
cyl3.rotation.y = 30

win = pyglet.window.Window(fullscreen=True)

scene = rc.Scene(meshes=[cylinder, cyl2, cyl3], bgColor=(0, 0, 0), camera=rc.Camera(projection=rc.OrthoProjection(coords='relative')))

fps_label = pyglet.window.FPSDisplay(window=win)

@win.event
def on_draw():
    with rc.default_shader:
        scene.draw()
    fps_label.draw()
#
def update(dt):
    cylinder.rotation.x += 100 * dt
    cyl2.rotation.y += 100 * dt
    cyl3.rotation.z += 100 * dt
pyglet.clock.schedule(update)
Example #23
0
    final_color = vec4(vec3(brightness), 1.) ;
 }
 """

shader = rc.Shader(vert=vert_shader, frag=frag_shader)
plane = rc.WavefrontReader(rc.resources.obj_primitives).get_mesh(
    'Plane')  #gen_fullscreen_quad()
plane.scale.xyz = .2
plane.position.xyz = 0, 0, -1
plane.uniforms['theta'] = 0.
plane.uniforms['width'] = .01

window = pyglet.window.Window(fullscreen=True)

scene = rc.Scene(meshes=[plane],
                 bgColor=(.5, .5, .5),
                 camera=rc.Camera(projection=rc.OrthoProjection()))


# Draw Function
@window.event
def on_draw():
    with shader:
        scene.draw()


def update(dt):
    plane.uniforms['theta'] += dt * 7.


pyglet.clock.schedule(update)
Example #24
0
def debug_view(vertices, texcoord, image=None, window_size=(800, 600)):
    # creates the window and sets its properties
    width, height = window_size
    window = pyglet.window.Window(width=width,
                                  height=height,
                                  caption='Debug Viewer',
                                  resizable=False)

    num_verts = 3 * vertices.shape[0]
    model = ratcave.Mesh(arrays=(vertices.reshape(num_verts, 3),
                                 texcoord.reshape(num_verts, 2)))
    model.position.xyz = 0, 0, -10

    if image is not None:
        image = image.transpose(PIL.Image.FLIP_TOP_BOTTOM)
        imgdata = pyglet.image.ImageData(image.width, image.height, 'RGBA',
                                         image.tobytes())
        mipmap = False
        tex = imgdata.get_mipmapped_texture(
        ) if mipmap else imgdata.get_texture()
        pyglet.gl.glBindTexture(pyglet.gl.GL_TEXTURE_2D, 0)
        model.textures.append(
            ratcave.Texture(id=tex.id, data=tex, mipmap=mipmap))

    scene = ratcave.Scene(meshes=[model])
    scene.camera.projection = ratcave.PerspectiveProjection(60.0,
                                                            width /
                                                            float(height),
                                                            z_far=100.0)

    def update(dt):
        pass

    pyglet.clock.schedule(update)

    shader = ratcave.Shader(vert=vert_shader, frag=frag_shader)

    @window.event
    def on_resize(width, height):
        # TODO update scene.camera.projection.viewport
        scene.camera.projection.aspect = width / float(height)
        return pyglet.event.EVENT_HANDLED

    @window.event
    def on_draw():
        with shader:
            scene.draw()

    @window.event
    def on_mouse_scroll(x, y, scroll_x, scroll_y):
        # scroll the MOUSE WHEEL to zoom
        scene.camera.position.z -= scroll_y / 10.0

    @window.event
    def on_mouse_drag(x, y, dx, dy, button, modifiers):
        # press the LEFT MOUSE BUTTON to rotate
        if button == pyglet.window.mouse.LEFT:
            model.rotation.y += dx / 5.0
            model.rotation.x -= dy / 5.0

        # press the LEFT and RIGHT MOUSE BUTTONS simultaneously to pan
        if button == pyglet.window.mouse.LEFT | pyglet.window.mouse.RIGHT:
            scene.camera.position.x -= dx / 100.0
            scene.camera.position.y -= dy / 100.0

    # starts the application
    pyglet.app.run()
Example #25
0
def main():
    #gettign positions of rigib bodies in real time
    client = NatClient()
    arena_rb = client.rigid_bodies['Arena']
    rat_rb = client.rigid_bodies['Rat']


    window = pyglet.window.Window(resizable=True, fullscreen=True, screen=get_screen(1))  # Opening the basic pyglet window


    # Load Arena
    remove_image_lines_from_mtl('assets/3D/grass_scene.mtl')
    arena_filename = 'assets/3D/grass_scene.obj'# we are taking an arena which has been opened in blender and rendered to 3D after scanning it does not have flipped normals
    arena_reader = rc.WavefrontReader(arena_filename)  # loading the mesh of the arena thought a wavefrontreader
    arena = arena_reader.get_mesh("Arena", position=arena_rb.position)  # making the wafrotn into mesh so we can extrude texture ont top of it.
    arena.uniforms['diffuse'] = 1., 1., 1.  # addign a white diffuse material to the arena
    arena.rotation = arena.rotation.to_quaternion() # we also need to get arena's rotation not just xyz so it can be tracked and moved if it gets bumped

    # Load the projector as a Ratcave camera, set light to its position
    projector = rc.Camera.from_pickle('assets/3D/projector.pkl')  # settign the pickle filled of the projector, which gives us the coordinates of where the projector is
    projector.position.x += .004
    projector.projection = rc.PerspectiveProjection(fov_y =40.5, aspect=1.777777778)
    light = rc.Light(position=projector.position)

    ## Make Virtual Scene ##
    fields = []
    for x, z in itertools.product([-.8, 0, .8], [-1.6, 0, 1.6]):
            field = load_textured_mesh(arena_reader, 'grass', 'grass.png')
            field.position.x += x
            field.position.z += z
            fields.append(field)

    ground = load_textured_mesh(arena_reader, 'Ground', 'dirt.png')
    sky = load_textured_mesh(arena_reader, 'Sky', 'sky.png')
    snake = load_textured_mesh(arena_reader, 'Snake', 'snake.png')

    rat_camera = rc.Camera(projection=rc.PerspectiveProjection(aspect=1, fov_y=90, z_near=.001, z_far=10), position=rat_rb.position)  # settign the camera to be on top of the rats head

    meshes = [ground, sky, snake] + fields
    for mesh in meshes:
        mesh.uniforms['diffuse'] = 1., 1., 1.
        mesh.uniforms['flat_shading'] = False
        mesh.parent = arena

    virtual_scene = rc.Scene(meshes=meshes, light=light, camera=rat_camera, bgColor=(0, 0, 255))  # seetign aset virtual scene to be projected as the mesh of the arena
    virtual_scene.gl_states.states = virtual_scene.gl_states.states[:-1]


    ## Make Cubemapping work on arena
    cube_texture = rc.TextureCube(width=4096, height=4096)  # usign cube mapping to import eh image on the texture of the arena
    framebuffer = rc.FBO(texture=cube_texture) ## creating a fr`amebuffer as the texture - in tut 4 it was the blue screen
    arena.textures.append(cube_texture)

    # Stereo
    vr_camgroup = rc.StereoCameraGroup(distance=.05)
    vr_camgroup.rotation = vr_camgroup.rotation.to_quaternion()



    # updating the posiotn of the arena in xyz and also in rotational perspective
    def update(dt):
        """main update function: put any movement or tracking steps in here, because it will be run constantly!"""
        vr_camgroup.position, vr_camgroup.rotation.xyzw = rat_rb.position, rat_rb.quaternion  # setting the actual osiont of the rat camera to vbe of the rat position
        arena.uniforms['playerPos'] = rat_rb.position
        arena.position, arena.rotation.xyzw = arena_rb.position, arena_rb.quaternion
        arena.position.y -= .02

    pyglet.clock.schedule(update)  # making it so that the app updates in real time


    @window.event
    def on_draw():

        ## Render virtual scene onto cube texture
        with framebuffer:
            with cube_shader:

                for mask, camside in zip([(True, False, False, True), (False, True, True, True)], [vr_camgroup.left, vr_camgroup.right]):
                    gl.glColorMask(*mask)
                    virtual_scene.camera.position.xyz = camside.position_global
                    virtual_scene.draw360_to_texture(cube_texture)

        ## Render real scene onto screen
        gl.glColorMask(True, True, True, True)
        window.clear()
        with cube_shader:  # usign cube shader to create the actuall 6 sided virtual cube which gets upated with position and angle of the camera/viewer
            rc.clear_color(255, 0, 0)
              # why is it here 39? e
            with projector, light:
                arena.draw()

    # actually run everything.
    pyglet.app.run()
Example #26
0
# Create Window and Add Keyboard State Handler to it's Event Loop
window = pyglet.window.Window()
keys = key.KeyStateHandler()
window.push_handlers(keys)

# Insert filename into WavefrontReader.
obj_filename = "3D.obj"
obj_reader = rc.WavefrontReader(obj_filename)

# Create Mesh
Object = obj_reader.get_mesh("3D.obj", position=(0, -0.4, -3), scale=.6)

#create camera

# Create Scene
scene = rc.Scene(meshes=[Object])


# Functions to Run in Event Loop
def rotate_meshes(dt):
    Object.rotation.y += 0 * dt  # dt is the time between frames


pyglet.clock.schedule(rotate_meshes)


def move_camera(dt):
    #camera_speed = 3
    if keys[key.LEFT]:
        #scene.camera.position.y -= camera_speed * dt
        Object.rotation.y -= 17 * dt
Example #27
0

def lerp(vecA, vecB, time):
    '''
    Linear interpolation between two vectors.
    Function from pyGameMath: https://github.com/explosiveduck/pyGameMath
    '''
    return (vecA * time) + (vecB * (1.0 - time))


win = pyglet.window.Window()
reader = rc.WavefrontReader(rc.resources.obj_primitives)
mesh = reader.get_mesh('MonkeySmooth', position=(0, 0, -2), scale=.2)

scene = rc.Scene(meshes=[mesh],
                 bgColor=(0.5, 0, 0),
                 camera=rc.Camera(projection=rc.OrthoProjection()))

fps_label = pyglet.window.FPSDisplay(window=win)


@win.event
def on_draw():
    with rc.default_shader:
        scene.draw()
    fps_label.draw()


def animation_sequence(mesh, nframes=50):
    verts_orig = mesh.arrays[0][:, :3].copy()
    verts_normed = (verts_orig.T / np.linalg.norm(verts_orig, axis=1)).T
Example #28
0
 {
     final_color = vec4(diffuse, 1.);
 }
 """

shader = rc.Shader(vert=vert_shader, frag=frag_shader)

# Create window and OpenGL context (always must come first!)
window = pyglet.window.Window()

# Load Meshes and put into a Scene
obj_reader = rc.WavefrontReader(rc.resources.obj_primitives)
torus = obj_reader.get_mesh('Torus', position=(0, 0, -2))
torus.uniforms['diffuse'] = [.5, .0, .8]

scene = rc.Scene(meshes=[torus])


# Constantly-Running mesh rotation, for fun
def update(dt):
    torus.rotation.y += 20. * dt


pyglet.clock.schedule(update)


def update_color(dt):
    torus.uniforms['diffuse'][0] = 0.5 * math.sin(time.clock() * 30) + .5


pyglet.clock.schedule(update_color)
from psychopy import visual, event
import ratcave as rc
import numpy as np
from numpy.random import random

n_points = 1000
width, height = 0.2, 0.5
theta = random(n_points) * np.pi * 2
verts = np.vstack((np.sin(theta) * width, (random(n_points) - .5) * height,
                   np.cos(theta) * width)).T

cylinder = rc.Mesh.from_incomplete_data(verts,
                                        drawmode=rc.gl.GL_POINTS,
                                        position=(0, 0, -2),
                                        point_size=2,
                                        mean_center=False)
cylinder.uniforms['diffuse'] = 1., 1., 1.
cylinder.uniforms['flat_shading'] = True

scene = rc.Scene(meshes=[cylinder], bgColor=(0., 0, 0))
scene.camera.projection = rc.OrthoProjection()

win = visual.Window()

while 'escape' not in event.getKeys():
    cylinder.rotation.y += .02
    with rc.default_shader:
        scene.draw()
    win.flip()
width, height = 0.2, 0.5
theta = random(n_points) * np.pi * 2
verts = np.vstack((np.sin(theta) * width, (random(n_points) - .5) * height,
                   np.cos(theta) * width)).T

cylinder = rc.Mesh.from_incomplete_data(verts,
                                        position=(0, 0, -2),
                                        mean_center=False,
                                        drawmode=rc.gl.GL_POINTS,
                                        point_size=.02)
cylinder.uniforms['diffuse'] = 1., 1., 1.
cylinder.uniforms['flat_shading'] = True
cylinder.rotation.x = 20

scene = rc.Scene(meshes=[cylinder],
                 bgColor=(0., 0, 0),
                 camera=rc.Camera(projection=rc.OrthoProjection()))

win = pyglet.window.Window(fullscreen=True)
fps_label = pyglet.window.FPSDisplay(window=win)


@win.event
def on_draw():
    with rc.default_shader:
        scene.draw()
    fps_label.draw()


def update(dt):
    cylinder.rotation.y += 100 * dt