for j in range(height): a = i < width / 2 b = j < width / 2 if (a == b): pixels[(i + j * width) * 3 + 0] = 0 pixels[(i + j * width) * 3 + 1] = 255 pixels[(i + j * width) * 3 + 2] = 255 else: pixels[(i + j * width) * 3 + 0] = colorR pixels[(i + j * width) * 3 + 1] = colorG pixels[(i + j * width) * 3 + 2] = colorB textureIndex = app.renderer.register_texture(pixels, width, height, False) shape = app.register_cube_shape(1, 1, 0.01, textureIndex, 40) print("shape=", shape) pos = p.TinyVector3f(0., 0., 0.) orn = p.TinyQuaternionf(0., 0., 0., 1.) color = p.TinyVector3f(1., 1., 1.) scaling = p.TinyVector3f(1., 1., 1.) opacity = 1 app.renderer.register_graphics_instance(shape, pos, orn, color, scaling, opacity) pos = p.TinyVector3f(0., 0., 1.) scaling = p.TinyVector3f(0.1, 0.1, 0.1) shape = app.register_graphics_unit_sphere_shape( p.EnumSphereLevelOfDetail.SPHERE_LOD_HIGH, textureIndex) sphere = app.renderer.register_graphics_instance(shape, pos, orn, color, scaling, opacity) app.renderer.write_transforms()
for j in range(height): a = i < width / 2 b = j < width / 2 if (a == b): pixels[(i + j * width) * 3 + 0] = 0 pixels[(i + j * width) * 3 + 1] = 0 pixels[(i + j * width) * 3 + 2] = 255 else: pixels[(i + j * width) * 3 + 0] = colorR pixels[(i + j * width) * 3 + 1] = colorG pixels[(i + j * width) * 3 + 2] = colorB textureIndex = app.renderer.register_texture(pixels, width, height, False) shape = app.register_cube_shape(1, 1, 0.01, textureIndex, 40) print("shape=", shape) pos = p.TinyVector3f(0., 0., 0.) orn = p.TinyQuaternionf(0., 0., 0., 1.) color = p.TinyVector3f(1., 1., 1.) scaling = p.TinyVector3f(1., 1., 1.) opacity = 1 app.renderer.register_graphics_instance(shape, pos, orn, color, scaling, opacity) app.renderer.write_transforms() while not app.window.requested_exit(): app.renderer.update_camera(1) app.draw_grid() from_line = p.TinyVector3f(0, 0, 0) to_line = p.TinyVector3f(1, 1, 1) color = p.TinyVector3f(1, 0, 0) width = 2
def rollout(force_x, force_y, step, render): if render: app.renderer.remove_all_instances() bodies = [] visuals = [] dt = dp.fraction(1, 60) gravity_z = dp.fraction(0, 1) world = dp.TinyWorld() world.gravity = dp.TinyVector3(dp.fraction(0, 1), dp.fraction(0, 1), dp.fraction(0, 1)) radius = dp.fraction(1, 2) mass = dp.fraction(1, 1) deg_60 = dp.pi() / dp.fraction(3, 1) #even triangle dx = dp.cos(deg_60) * radius * dp.fraction(2, 1) dy = dp.sin(deg_60) * radius * dp.fraction(2, 1) rx = dp.fraction(0, 1) y = dp.fraction(0, 1) target_pos = dp.TinyVector3(dp.fraction(35, 10), dp.fraction(8, 1), dp.fraction(0, 1)) ball_id = 0 target_id = 5 if render: orn = p.TinyQuaternionf(0., 0., 0., 1.) pos = p.TinyVector3f(dp.get_debug_double(target_pos[0]), dp.get_debug_double(target_pos[1]), dp.get_debug_double(target_pos[2])) color = p.TinyVector3f(0, 0, 1) opacity = 1 scaling = p.TinyVector3f(dp.get_debug_double(radius), dp.get_debug_double(radius), dp.get_debug_double(radius)) textureIndex = -1 shape = app.register_graphics_unit_sphere_shape( p.EnumSphereLevelOfDetail.SPHERE_LOD_HIGH, textureIndex) sphere_id = app.renderer.register_graphics_instance( shape, pos, orn, color, scaling, opacity) geoms = [] for column in [1, 2, 3]: x = dp.copy(rx) i = 0 while (i < column): geom = dp.TinySphere(radius) geoms.append(geom) body = dp.TinyRigidBody(mass, geom) body.world_pose.position = dp.TinyVector3(x, y, dp.fraction(0, 1)) bodies.append(body) if render: orn = p.TinyQuaternionf(0., 0., 0., 1.) pos = p.TinyVector3f( dp.get_debug_double(body.world_pose.position[0]), dp.get_debug_double(body.world_pose.position[1]), dp.get_debug_double(body.world_pose.position[2])) if ball_id == target_id: color = p.TinyVector3f(1, 0, 0) else: color = p.TinyVector3f(1, 1, 1) opacity = 1 scaling = p.TinyVector3f(dp.get_debug_double(radius), dp.get_debug_double(radius), dp.get_debug_double(radius)) textureIndex = -1 shape = app.register_graphics_unit_sphere_shape( p.EnumSphereLevelOfDetail.SPHERE_LOD_HIGH, textureIndex) sphere_id = app.renderer.register_graphics_instance( shape, pos, orn, color, scaling, opacity) visuals.append(sphere_id) ball_id += 1 x += radius * dp.fraction(2, 1) i += 1 rx = rx - dx y = y + dy #white player ball white = dp.TinyVector3(dp.fraction(0, 1), -dp.fraction(2, 1), dp.fraction(0, 1)) white_geom = dp.TinySphere(radius) white_ball = dp.TinyRigidBody(mass, white_geom) white_ball.world_pose.position = white bodies.append(white_ball) white_ball.apply_central_force( dp.TinyVector3(force_x, force_y, dp.fraction(0, 1))) if render: orn = p.TinyQuaternionf(0., 0., 0., 1.) pos = p.TinyVector3f( dp.get_debug_double(white_ball.world_pose.position[0]), dp.get_debug_double(white_ball.world_pose.position[1]), dp.get_debug_double(white_ball.world_pose.position[2])) color = p.TinyVector3f(1, 1, 1) opacity = 1 scaling = p.TinyVector3f(dp.get_debug_double(radius), dp.get_debug_double(radius), dp.get_debug_double(radius)) textureIndex = -1 shape = app.register_graphics_unit_sphere_shape( p.EnumSphereLevelOfDetail.SPHERE_LOD_HIGH, textureIndex) sphere_id = app.renderer.register_graphics_instance( shape, pos, orn, color, scaling, opacity) visuals.append(sphere_id) rb_solver = dp.TinyConstraintSolver() if render: app.renderer.write_transforms() #world.step(dt) for iter in range(step): for b in bodies: b.apply_gravity(world.gravity) b.apply_force_impulse(dt) b.clear_forces() dispatcher = world.get_collision_dispatcher() contacts = world.compute_contacts_rigid_body(bodies, dispatcher) #print("contacts=",contacts) num_solver_iterations = 50 for solver_iter in range(num_solver_iterations): for c in contacts: rb_solver.resolve_collision(c, dt) for b in bodies: b.integrate(dt) #sync visual transforms if render: for v in range(len(bodies)): #print("v=",v) b = bodies[v] pos = p.TinyVector3f( dp.get_debug_double(b.world_pose.position[0]), dp.get_debug_double(b.world_pose.position[1]), dp.get_debug_double(b.world_pose.position[2])) #print("pos=",pos) orn = p.TinyQuaternionf(0, 0, 0, 1) app.renderer.write_single_instance_transform_to_cpu( pos, orn, visuals[v]) app.renderer.write_transforms() app.renderer.update_camera(2) dg = p.DrawGridData() app.draw_grid(dg) app.renderer.render_scene() app.swap_buffer() #print("finished step!") diff = bodies[target_id].world_pose.position - target_pos cost = diff.sqnorm() print("cost=", cost) return cost
for i in range(width): for j in range(height): a = i < width / 2 b = j < width / 2 if (a == b): pixels[(i + j * width) * 3 + 0] = 0 pixels[(i + j * width) * 3 + 1] = 255 pixels[(i + j * width) * 3 + 2] = 255 else: pixels[(i + j * width) * 3 + 0] = colorR pixels[(i + j * width) * 3 + 1] = colorG pixels[(i + j * width) * 3 + 2] = colorB textureIndex = app.renderer.register_texture(pixels, width, height, False) color = p.TinyVector3f(1., 1., 1.) opacity = 1 orn = p.TinyQuaternionf(0., 0., 0., 1.) pos = p.TinyVector3f(0., 0., 1.) scaling = p.TinyVector3f(0.1, 0.1, 0.1) shape = app.register_graphics_unit_sphere_shape( p.EnumSphereLevelOfDetail.SPHERE_LOD_HIGH, textureIndex) sphere_a = app.renderer.register_graphics_instance(shape, pos, orn, color, scaling, opacity) sphere_b = app.renderer.register_graphics_instance(shape, pos, orn, color, scaling, opacity) app.renderer.write_transforms() while not app.window.requested_exit(): app.renderer.update_camera(2)
import pytinyopengl3 as p import math, time app = p.TinyOpenGL3App("title") app.renderer.init() cam = p.TinyCamera() cam.set_camera_distance(2.) cam.set_camera_pitch(-20) app.renderer.set_camera(cam) pos = p.TinyVector3f(0., 0., 0.) orn = p.TinyQuaternionf(0., 0., 0., 1.) orn.set_euler_rpy(p.TinyVector3f(math.pi / 2.0, 0., 0.)) color = p.TinyVector3f(1., 1., 1.) scaling = p.TinyVector3f(.1, 0.1, 0.1) opacity = 0.4 app.renderer.write_transforms() #bunny_file = "../../data/bunny.obj" bunny_file = "../../data/cube.obj" #bunny_file = "../../data/laikago/chassis.obj" shapes = p.load_obj_shapes(app, bunny_file, pos, orn, scaling) shape = shapes[0] cube_size = 0.1 for x in range(20):
#target_uid = p.loadURDF("ubox.urdf", flags=flags, globalScaling=0.1) ldi = ldi3d.LDI(target_uid=target_uid, bullet_client=p) print("target volume =", ldi._target_volume) import pytinyopengl3 as p import math, time app = p.TinyOpenGL3App("ldi") app.renderer.init() cam = p.TinyCamera() cam.set_camera_distance(2.) cam.set_camera_pitch(-20) app.renderer.set_camera(cam) pos = p.TinyVector3f(0., 0., 0.) orn = p.TinyQuaternionf(0., 0., 0., 1.) orn.set_euler_rpy(p.TinyVector3f(math.pi / 2.0, 0., 0.)) color = p.TinyVector3f(1., 1., 1.) bun_color = p.TinyVector3f(1., 0., 0.) bun_scaling = p.TinyVector3f(1, 1, 1) opacity = 1 app.renderer.write_transforms() bunny_file = "../../../data/bunny.obj" bun_shapes = p.load_obj_shapes(app, bunny_file, pos, orn, bun_scaling) bun_mesh = app.renderer.register_graphics_instance(bun_shapes[0], pos, orn,