def setup(self, world): world.clear() efig = Utils().GetFigure() efig.clearMesh() shape = igeBullet.shape(igeBullet.BOX_SHAPE_PROXYTYPE, halfExtents=(1, 0.2, 1)) self.body1 = igeBullet.rigidBody(shape, 0, (0, 5, -1.2), (0, 0, 0, 1)) world.add(self.body1) Utils().AddShapeMesh(shape) self.body2 = igeBullet.rigidBody(shape, 1, (0, 5, 1.2), (0, 0, 0, 1)) world.add(self.body2) Utils().AddShapeMesh(shape) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, 3.14 / 2, 0)) posA = vmath.vec3(0, 0, 1.2) rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, 3.14 / 2, 0)) posB = vmath.vec3(0, 0, -1.2) joint = igeBullet.constraint(igeBullet.HINGE_CONSTRAINT_TYPE, self.body1, self.body2, frameA=(posA, rotA), frameB=(posB, rotB)) world.add(joint) efig.mergeSameMaterialMesh()
def __init__( self): self.currentState = STATUS_STAY self.nextState = STATUS_STAY self.figure = core.figure('Sapphiart/Sapphiart') self.figure.connectAnimator(core.ANIMETION_SLOT_A0, STATE_MOTION[self.currentState]) self.currentDir= vmath.vec3(0,0,1) self.gorlDir= vmath.vec3(0,0,1) self.currentPosition = vmath.vec3(0,0,0) self.transitTime = 0.0
def step(self): touch = core.singleTouch() if touch is not None: self.frame.position = vmath.vec3(touch['org_x'], touch['org_y'], 0) self.button.position = vmath.vec3(touch['cur_x'], touch['cur_y'], 10) else: self.frame.position = vmath.vec3(0, 1000, 0) self.button.position = vmath.vec3(0, 1000, 10)
def step(self, targetFigure): at = targetFigure.position dir = at - self.pos distance = vmath.length(dir) dir = vmath.normalize(dir) speed = 0.0 if distance > 6.0: speed = (distance - 6.0) * 0.1 elif distance < 4.0: speed = (distance - 4.0) * 0.1 self.pos += dir * speed self.camera.target = at + vmath.vec3(0, self.targetHeighjt, 0) self.camera.position = self.pos + vmath.vec3(0, self.height, 0)
def IntersectRayAABB(p, d, min, max): tmin = 0.0 tmax = sys.float_info.max for i in range(3): if math.fabs(d.getElem(i)) < sys.float_info.epsilon: if p.getElem(i) < min.getElem(i) or p.getElem(i) > max.getElem(i): return False, 0, vmath.vec3() else: ood = 1.0 / d.getElem(i) t1 = (min.getElem(i) - p.getElem(i)) * ood t2 = (max.getElem(i) - p.getElem(i)) * ood if t1 > t2: t1, t2 = t2, t1 if t1 > tmin: tmin = t1 if t2 < tmax: tmax = t2 if tmin > tmax: return False, 0, vmath.vec3() q = p + d * tmin return True, tmin, q
def setup(self, world): world.clear() efig = Utils().GetFigure() efig.clearMesh() shape = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 1, 4) self.body1 = igeBullet.rigidBody(shape,0,(-3,5,0),vmath.quat(vmath.mat_rotationZYX(3, 0, 0, 3.14/2))) world.add(self.body1) Utils().AddShapeMesh(shape) self.body2 = igeBullet.rigidBody(shape,1,(3,5,0),vmath.quat(vmath.mat_rotationZYX(3, 0, 0, 3.14/2))) world.add(self.body2) Utils().AddShapeMesh(shape) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, 3.14/2)) posA = vmath.vec3(0, -3.2, 0) rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, 3.14/2)) posB = vmath.vec3(0, 3.2, 0) joint = igeBullet.constraint(igeBullet.CONETWIST_CONSTRAINT_TYPE, self.body1, self.body2, frameA=(posA, rotA), frameB=(posB, rotB)) world.add(joint) efig.mergeSameMaterialMesh()
def __init__(self): self.pos = vmath.vec3(0, 0, 5) self.height = 3.0 self.targetHeighjt = 1.0 self.camera = core.camera("cam01")
using Box2D with ige """ import igeCore as core import igeVmath as vmath import Box2D from Box2D.b2 import (world, polygonShape, staticBody, dynamicBody) from DynamicBox import DynamicBox # open or resize window (This function is valid only on PC,Ignored in smartphone apps) core.window(True, 480, 640) cam = core.camera("maincam") cam.orthographicProjection = True cam.position = vmath.vec3(0.0, 0.0, 100.0) showcase = core.showcase() boxes = [] world = world(gravity=(0, -10), doSleep=True) boxes.append(DynamicBox(world, showcase, (0, -100), (150, 20), 0, True)) boxes.append(DynamicBox(world, showcase, (10, 100), (10, 5), 15)) while True: core.update() touch = core.singleTouch() if touch is not None and touch['is_pressed']: boxes.append( DynamicBox(world, showcase, (touch['cur_x'], touch['cur_y']),
#add shadow shader for i in range(ground.numMaterials): shaderGen = ground.getShaderGenerator(i) shaderGen.setShadow(False, True, True) ground.setShaderGenerator(i, shaderGen) #create shadow buffer shadowBuffer = core.texture('Shadow', 1024, 1024, format=core.GL_RED, depth=True, float=True) efig = graphicsHelper.createSprite(100, 100, shadowBuffer) efig.position = vmath.vec3(-100, 200, 0) # what you want to draw should be registered in showcase showcase2D = core.showcase('2dcase') showcase3D = core.showcase("3dcase") showcase3D.add(ground) showcase3D.add(char.figure) showcase2D.add(efig) showcase2D.add(controller.frame) showcase2D.add(controller.button) showcase3D.addShadowBuffer(shadowBuffer) #set shadow environment
def setup(self, world): world.clear() efig = Utils().GetFigure() efig.clearMesh() #shape = igeBullet.shape(igeBullet.STATIC_PLANE_PROXYTYPE, normal=(0,1,0), constant=0) shape = igeBullet.shape(igeBullet.BOX_SHAPE_PROXYTYPE, halfExtents=(10,1,10)) body = igeBullet.rigidBody(shape,0,(0,0,0),(0,0,0,1)) world.add(body) Utils().AddShapeMesh(shape) scale = 5.0 offset = vmath.vec3(0, 5, 0) M_PI = 3.14159265358979323846 M_PI_2 = 1.57079632679489661923 M_PI_4 = 0.785398163397448309616 BODYPART_PELVIS = 0 BODYPART_SPINE = 1 BODYPART_HEAD = 2 BODYPART_LEFT_UPPER_LEG = 3 BODYPART_LEFT_LOWER_LEG = 4 BODYPART_RIGHT_UPPER_LEG = 5 BODYPART_RIGHT_LOWER_LEG = 6 BODYPART_LEFT_UPPER_ARM = 7 BODYPART_LEFT_LOWER_ARM = 8 BODYPART_RIGHT_UPPER_ARM = 9 BODYPART_RIGHT_LOWER_ARM = 10 self.BODYPART_COUNT = 11 JOINT_PELVIS_SPINE = 0 JOINT_SPINE_HEAD = 1 JOINT_LEFT_HIP = 2 JOINT_LEFT_KNEE = 3 JOINT_RIGHT_HIP = 4 JOINT_RIGHT_KNEE = 5 JOINT_LEFT_SHOULDER = 6 JOINT_LEFT_ELBOW = 7 JOINT_RIGHT_SHOULDER = 8 JOINT_RIGHT_ELBOW = 9 JOINT_COUNT = 10 m_shapes = [0] * self.BODYPART_COUNT m_shapes[BODYPART_PELVIS] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.15 * scale, 0.20 * scale) m_shapes[BODYPART_SPINE] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.15 * scale, 0.28 * scale) m_shapes[BODYPART_HEAD] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.10 * scale, 0.05 * scale) m_shapes[BODYPART_LEFT_UPPER_LEG] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.07 * scale, 0.45 * scale) m_shapes[BODYPART_LEFT_LOWER_LEG] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.05 * scale, 0.37 * scale) m_shapes[BODYPART_RIGHT_UPPER_LEG] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.07 * scale, 0.45 * scale) m_shapes[BODYPART_RIGHT_LOWER_LEG] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.05 * scale, 0.37 * scale) m_shapes[BODYPART_LEFT_UPPER_ARM] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.05 * scale, 0.33 * scale) m_shapes[BODYPART_LEFT_LOWER_ARM] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.04 * scale, 0.25 * scale) m_shapes[BODYPART_RIGHT_UPPER_ARM] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.05 * scale, 0.33 * scale) m_shapes[BODYPART_RIGHT_LOWER_ARM] = igeBullet.shape(igeBullet.CAPSULE_SHAPE_PROXYTYPE, 0.04 * scale, 0.25 * scale) for i in range(self.BODYPART_COUNT): Utils().AddShapeMesh(m_shapes[i]) self.m_bodies = [0] * self.BODYPART_COUNT pos = vmath.vec3(0, 1, 0) * scale + offset rot = vmath.quat() self.m_bodies[BODYPART_PELVIS] = igeBullet.rigidBody(m_shapes[BODYPART_PELVIS], 1, pos, rot) world.add(self.m_bodies[BODYPART_PELVIS]) pos = vmath.vec3(0, 1.2, 0) * scale + offset self.m_bodies[BODYPART_SPINE] = igeBullet.rigidBody(m_shapes[BODYPART_SPINE], 1, pos, rot) world.add(self.m_bodies[BODYPART_SPINE]) pos = vmath.vec3(0, 1.6, 0) * scale + offset self.m_bodies[BODYPART_HEAD] = igeBullet.rigidBody(m_shapes[BODYPART_HEAD], 1, pos, rot) world.add(self.m_bodies[BODYPART_HEAD]) pos = vmath.vec3(-0.18, 0.65, 0) * scale + offset self.m_bodies[BODYPART_LEFT_UPPER_LEG] = igeBullet.rigidBody(m_shapes[BODYPART_LEFT_UPPER_LEG], 1, pos, rot) world.add(self.m_bodies[BODYPART_LEFT_UPPER_LEG]) pos = vmath.vec3(-0.18, 0.2, 0) * scale + offset self.m_bodies[BODYPART_LEFT_LOWER_LEG] = igeBullet.rigidBody(m_shapes[BODYPART_LEFT_LOWER_LEG], 1, pos, rot) world.add(self.m_bodies[BODYPART_LEFT_LOWER_LEG]) pos = vmath.vec3(0.18, 0.65, 0) * scale + offset self.m_bodies[BODYPART_RIGHT_UPPER_LEG] = igeBullet.rigidBody(m_shapes[BODYPART_RIGHT_UPPER_LEG], 1, pos, rot) world.add(self.m_bodies[BODYPART_RIGHT_UPPER_LEG]) pos = vmath.vec3(0.18, 0.2, 0) * scale + offset self.m_bodies[BODYPART_RIGHT_LOWER_LEG] = igeBullet.rigidBody(m_shapes[BODYPART_RIGHT_LOWER_LEG], 1, pos, rot) world.add(self.m_bodies[BODYPART_RIGHT_LOWER_LEG]) pos = vmath.vec3(-0.35, 1.45, 0) * scale + offset rot = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI_2)) self.m_bodies[BODYPART_LEFT_UPPER_ARM] = igeBullet.rigidBody(m_shapes[BODYPART_LEFT_UPPER_ARM], 1, pos, rot) world.add(self.m_bodies[BODYPART_LEFT_UPPER_ARM]) pos = vmath.vec3(-0.7, 1.45, 0) * scale + offset rot = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI_2)) self.m_bodies[BODYPART_LEFT_LOWER_ARM] = igeBullet.rigidBody(m_shapes[BODYPART_LEFT_LOWER_ARM], 1, pos, rot) world.add(self.m_bodies[BODYPART_LEFT_LOWER_ARM]) pos = vmath.vec3(0.35, 1.45, 0) * scale + offset rot = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, -M_PI_2)) self.m_bodies[BODYPART_RIGHT_UPPER_ARM] = igeBullet.rigidBody(m_shapes[BODYPART_RIGHT_UPPER_ARM], 1, pos, rot) world.add(self.m_bodies[BODYPART_RIGHT_UPPER_ARM]) pos = vmath.vec3(0.7, 1.45, 0) * scale + offset rot = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, -M_PI_2)) self.m_bodies[BODYPART_RIGHT_LOWER_ARM] = igeBullet.rigidBody(m_shapes[BODYPART_RIGHT_LOWER_ARM], 1, pos, rot) world.add(self.m_bodies[BODYPART_RIGHT_LOWER_ARM]) for i in range(self.BODYPART_COUNT): self.m_bodies[i].linearDamping = 0.05 self.m_bodies[i].angularDamping = 0.85 self.m_bodies[i].deactivationTime = 0.8 self.m_bodies[i].linearSleepingThreshold = 1.6 self.m_bodies[i].angularSleepingThreshold = 2.5 m_joints = [0] * JOINT_COUNT rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posA = vmath.vec3(0, 0.15, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posB = vmath.vec3(0, -0.15, 0) * scale m_joints[JOINT_PELVIS_SPINE] = igeBullet.constraint(igeBullet.HINGE_CONSTRAINT_TYPE, self.m_bodies[BODYPART_PELVIS], self.m_bodies[BODYPART_SPINE], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_PELVIS_SPINE].setLimit(-M_PI_4, M_PI_2) world.add(m_joints[JOINT_PELVIS_SPINE], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI_2)) posA = vmath.vec3(0, 0.3, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI_2)) posB = vmath.vec3(0, -0.14, 0) * scale m_joints[JOINT_SPINE_HEAD] = igeBullet.constraint(igeBullet.CONETWIST_CONSTRAINT_TYPE, self.m_bodies[BODYPART_SPINE], self.m_bodies[BODYPART_HEAD], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_SPINE_HEAD].setLimit(M_PI_4, M_PI_4, M_PI_2) world.add(m_joints[JOINT_SPINE_HEAD], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, -M_PI_4 * 5)) posA = vmath.vec3(-0.18, -0.10, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, -M_PI_4 * 5)) posB = vmath.vec3(0, 0.225, 0) * scale m_joints[JOINT_LEFT_HIP] = igeBullet.constraint(igeBullet.CONETWIST_CONSTRAINT_TYPE, self.m_bodies[BODYPART_PELVIS], self.m_bodies[BODYPART_LEFT_UPPER_LEG], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_LEFT_HIP].setLimit(M_PI_4, M_PI_4, 0) world.add(m_joints[JOINT_LEFT_HIP], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posA = vmath.vec3(0, -0.225, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posB = vmath.vec3(0, 0.185, 0) * scale m_joints[JOINT_LEFT_KNEE] = igeBullet.constraint(igeBullet.HINGE_CONSTRAINT_TYPE, self.m_bodies[BODYPART_LEFT_UPPER_LEG], self.m_bodies[BODYPART_LEFT_LOWER_LEG], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_LEFT_KNEE].setLimit(0, M_PI_2) world.add(m_joints[JOINT_LEFT_KNEE], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI_4)) posA = vmath.vec3(0.18, -0.10, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI_4)) posB = vmath.vec3(0, 0.225, 0) * scale m_joints[JOINT_RIGHT_HIP] = igeBullet.constraint(igeBullet.CONETWIST_CONSTRAINT_TYPE, self.m_bodies[BODYPART_PELVIS], self.m_bodies[BODYPART_RIGHT_UPPER_LEG], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_RIGHT_HIP].setLimit(M_PI_4, M_PI_4, 0) world.add(m_joints[JOINT_RIGHT_HIP], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posA = vmath.vec3(0, -0.225, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posB = vmath.vec3(0., 0.185, 0) * scale m_joints[JOINT_RIGHT_KNEE] = igeBullet.constraint(igeBullet.HINGE_CONSTRAINT_TYPE, self.m_bodies[BODYPART_RIGHT_UPPER_LEG], self.m_bodies[BODYPART_RIGHT_LOWER_LEG], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_RIGHT_KNEE].setLimit(0, M_PI_2) world.add(m_joints[JOINT_RIGHT_KNEE], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI)) posA = vmath.vec3(-0.2, 0.15, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI)) posB = vmath.vec3(0, -0.18, 0) * scale m_joints[JOINT_LEFT_SHOULDER] = igeBullet.constraint(igeBullet.CONETWIST_CONSTRAINT_TYPE, self.m_bodies[BODYPART_SPINE], self.m_bodies[BODYPART_LEFT_UPPER_ARM], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_LEFT_SHOULDER].setLimit(M_PI_2, M_PI_2, 0) world.add(m_joints[JOINT_LEFT_SHOULDER], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posA = vmath.vec3(0, 0.18, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posB = vmath.vec3(0, -0.14, 0) * scale m_joints[JOINT_LEFT_ELBOW] = igeBullet.constraint(igeBullet.HINGE_CONSTRAINT_TYPE, self.m_bodies[BODYPART_LEFT_UPPER_ARM], self.m_bodies[BODYPART_LEFT_LOWER_ARM], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_LEFT_ELBOW].setLimit(-M_PI_2, 0) world.add(m_joints[JOINT_LEFT_ELBOW], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, 0)) posA = vmath.vec3(0.2, 0.15, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, 0, M_PI_2)) posB = vmath.vec3(0, -0.18, 0) * scale m_joints[JOINT_RIGHT_SHOULDER] = igeBullet.constraint(igeBullet.CONETWIST_CONSTRAINT_TYPE, self.m_bodies[BODYPART_SPINE], self.m_bodies[BODYPART_RIGHT_UPPER_ARM], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_RIGHT_SHOULDER].setLimit(M_PI_2, M_PI_2, 0) world.add(m_joints[JOINT_RIGHT_SHOULDER], True) rotA = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posA = vmath.vec3(0, 0.18, 0) * scale rotB = vmath.quat(vmath.mat_rotationZYX(3, 0, M_PI_2, 0)) posB = vmath.vec3(0, -0.14, 0) * scale m_joints[JOINT_RIGHT_ELBOW] = igeBullet.constraint(igeBullet.HINGE_CONSTRAINT_TYPE, self.m_bodies[BODYPART_RIGHT_UPPER_ARM], self.m_bodies[BODYPART_RIGHT_LOWER_ARM], frameA=(posA, rotA), frameB=(posB, rotB)) m_joints[JOINT_RIGHT_ELBOW].setLimit(-M_PI_2, 0) world.add(m_joints[JOINT_RIGHT_ELBOW], True) efig.mergeSameMaterialMesh()
showcase3D.add(char.figure) showcase3D.add(efig) showcase2D.add(controller.frame) showcase2D.add(controller.button) cam2D = core.camera('2dcam') cam2D.orthographicProjection = True cam2D.position = (0, 0, 100) loop = True while loop: core.update() world.step() moveVector = vmath.vec3(0.0, 0.0, 0.0) touch = core.singleTouch() if touch is not None: moveVector = vmath.vec3(touch['cur_x'] - touch['org_x'], 0, -(touch['cur_y'] - touch['org_y'])) d = vmath.length(moveVector) viewMat = cam.getWalkThroughMatrix() moveVector = vmath.vec3(viewMat * moveVector) char.step(moveVector) cam.step(char.figure) controller.step() efig = utl.GetFigure() efig.setJoint(0, position=body2.position, rotation=body2.rotation)
import igeCore as core from igeCore.apputil import graphicsHelper import igeVmath as vmath import cv2 core.window(True, 480, 640) showcase = core.showcase("case01") cam = core.camera('maincam') cam.position = vmath.vec3(0, 0, 1.5) capture = cv2.VideoCapture(0) width = capture.get(3) # width height = capture.get(4) # height tex = core.texture("photo", int(width), int(height), core.GL_RGB) #RGB format efig = graphicsHelper.createSprite(width*0.001, height*0.001, tex) efig.position = vmath.vec3(-0.15, 0.3, 0) showcase.add(efig) while(True): core.update() ret, frame = capture.read() frame = cv2.flip(frame,-1) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) tex.setImage(frame) core.update() cam.shoot(showcase)