public AgX_Primitive(Guid guid, string shape, Vector3 pos, Quaternion rot, Vector3 size, double mass, string materialName) { this.guid = guid; this.shape = shape; this.size = size; this.materialName = materialName; var dynamicRBGeometry = new agxCollide.Geometry(); switch (shape) { case "Box": dynamicRBGeometry.add(new agxCollide.Box(Operations.ToAgxVec3(this.size))); break; case "Sphere": dynamicRBGeometry.add(new agxCollide.Sphere((this.size.x + this.size.y + this.size.z) / 3)); break; } dynamicRBGeometry.setMaterial(new agx.Material(materialName)); agx_Object = new agx.RigidBody(); agx_Object.add(dynamicRBGeometry); agx_Object.setLocalPosition(Operations.ToAgxVec3(pos)); ///AgX agx_Object.setLocalRotation(new agx.Quat(rot.x, rot.y, rot.z, rot.w)); ///AgX agx_Object.getMassProperties().setMass(mass); AddToSim(); }
/// <summary> /// Merges all source objects to one mesh and creates a native trimesh. /// </summary> /// <param name="meshes">Source meshes.</param> /// <returns>Native trimesh.</returns> private agxCollide.Geometry Create(UnityEngine.Mesh[] meshes) { var geometry = new agxCollide.Geometry(); if (m_precomputedCollisionMeshes.Count > 0) { // The vertices are assumed to be stored in local coordinates of the // given transform. For the scale to be correct w var toWorld = transform.localToWorldMatrix; Func <Vector3, Vector3> transformer = v => { return(transform.InverseTransformDirection(toWorld * v.ToLeftHanded())); }; var mode = Options != null ? Options.Mode : CollisionMeshOptions.MeshMode.Trimesh; for (int i = 0; i < m_precomputedCollisionMeshes.Count; ++i) { var collisionMesh = m_precomputedCollisionMeshes[i]; if (collisionMesh == null) { Debug.LogWarning($"AGXUnity.Collide.Mesh: Null precomputed collision mesh at index {i}.", this); continue; } var shape = collisionMesh.CreateShape(transformer, mode); if (shape == null) { Debug.LogWarning($"AGXUnity.Collide.Mesh: Precomputed collision mesh at index {i} resulted in an invalid shape.", this); continue; } geometry.add(shape, GetNativeGeometryOffset()); } } else { if (m_precomputedCollisionMeshes.Count > 0) { Debug.LogWarning("AGXUnity.Mesh: Failed to create shapes from precomputed data - using Trimesh as fallback.", this); } var merger = MeshMerger.Merge(transform, meshes); geometry.add(new agxCollide.Trimesh(merger.Vertices, merger.Indices, "AGXUnity.Mesh: Trimesh"), GetNativeGeometryOffset()); } if (geometry.getShapes().Count == 0) { geometry.Dispose(); geometry = null; } return(geometry); }
public AgX_Frame(Guid guid, string shape, Vector3[] vertices, Vector2[] uvs, int[] triangles, double size, Vector3 pos, Quaternion rot, double mass, bool isStatic, string materialName) { this.guid = guid; this.shape = shape; this.size = size; this.materialName = materialName; var tri = new agxCollide.Trimesh(Operations.ToAgxVec3Vector(vertices), Operations.ToAgxIntVector(triangles), "stdFrame"); ///Creates a geometry var dynamicRBGeometry = new agxCollide.Geometry(); dynamicRBGeometry.add(tri); dynamicRBGeometry.setMaterial(new agx.Material(materialName)); agx_Object = new agx.RigidBody(); ///Adds selected geometry to the rigidbody agx_Object.add(dynamicRBGeometry); agx_Object.setLocalPosition(Operations.ToAgxVec3(pos)); ///AgX agx_Object.setLocalRotation(new agx.Quat(rot.x, rot.y, rot.z, rot.w)); ///AgX agx_Object.getMassProperties().setMass(mass); if (isStatic) { agx_Object.setMotionControl(agx.RigidBody.MotionControl.STATIC); } AddToAssembly(); }
/*--------------------------------------------------Creating terrain--------------------------------------------------*/ //public void Create_Terrain(Guid guid, string heightmap, Vector3 position, string materialName, double restitution, double friction, double height) public AgX_Scene(Guid guid, List <Vector3> vertices, List <int> triangles, Vector3 position, string materialName) { this.guid = guid; //AgX: agx.Vec3Vector agx_vertices = new agx.Vec3Vector(); agx.UInt32Vector agx_indices = new agx.UInt32Vector(); for (int i = 0; i < vertices.Count; i++) { agx_vertices.Add(Operations.ToAgxVec3(vertices[i])); } for (int i = 0; i < triangles.Count; i++) { agx_indices.Add((uint)triangles[i]); } terrain = new agx.RigidBody(); //uint optionsMask = (uint)agxCollide.Trimesh.TrimeshOptionsFlags.TERRAIN; var terrain_trimesh = new agxCollide.Trimesh(agx_vertices, agx_indices, "handmade terrain");//, optionsMask, height); var geometry = new agxCollide.Geometry(); geometry.add(terrain_trimesh); geometry.setMaterial(new agx.Material(materialName)); terrain.add(geometry); terrain.setMotionControl(agx.RigidBody.MotionControl.STATIC); //position.y -= height; terrain.setLocalPosition(Operations.ToAgxVec3(position));//move right and -height for global 0 ///Adds terrain to simulation //simulation.add(terrain); Agx_Simulation.sim_Instance.add(terrain); }
public AgX_Frame(Guid guid, string shape, Vector3[] vertices, Vector2[] uvs, int[] triangles, double size, Vector3 pos, Quaternion rot, double mass, bool isStatic, string materialName) { this.guid = guid; this.shape = shape; this.size = size; this.materialName = materialName; //scale by 2, to fit unity. /* Vector3[] tmp_verts = vertices; * for (int i = 0; i < tmp_verts.Length; i++) * { * tmp_verts[i].x *= 2; * tmp_verts[i].y *= 2; * tmp_verts[i].z *= 2; * }*/ var tri = new agxCollide.Trimesh(Operations.ToAgxVec3Vector(vertices), Operations.ToAgxIntVector(triangles), "stdFrame"); ///Creates a geometry var dynamicRBGeometry = new agxCollide.Geometry(); dynamicRBGeometry.add(tri); dynamicRBGeometry.setMaterial(new agx.Material(materialName)); ///Creates the selected shape /*switch (shape) * { * case "Box": dynamicRBGeometry.add(new agxCollide.Box(Operations.ToAgxVec3(size))); break; * case "Sphere": dynamicRBGeometry.add(new agxCollide.Sphere((size.x + size.y + size.z) / 3)); break; * }*/ agx_Object = new agx.RigidBody(); ///Adds selected geometry to the rigidbody agx_Object.add(dynamicRBGeometry); agx_Object.setLocalPosition(Operations.ToAgxVec3(pos));///AgX //var y = new agx.EulerAngles(Operations.ToAgxVec3(rot)); //UnityEngine.Debug.Log("x: " + y.x + ", y: " + y.y + ", z: " + y.z); agx_Object.setLocalRotation(new agx.Quat(rot.x, rot.y, rot.z, rot.w));///AgX //agx_Object.setLocalRotation(new agx.EulerAngles(Operations.ToAgxVec3(rot)));///AgX //UnityEngine.Debug.Log("x: " +agx_Object.getLocalPosition().x + ", y: " + agx_Object.getLocalPosition().y + ", z: " + agx_Object.getLocalPosition().z); agx_Object.getMassProperties().setMass(mass); if (isStatic) { agx_Object.setMotionControl(agx.RigidBody.MotionControl.STATIC); } AddToSim(); }
public AgX_Primitive(Guid guid, string shape, Vector3 pos, Quaternion rot, Vector3 size, double mass, string materialName, bool isStatic, bool AddToRobot) { this.guid = guid; this.shape = shape; this.size = size; this.materialName = materialName; var dynamicRBGeometry = new agxCollide.Geometry(); switch (this.shape) { case "Box": dynamicRBGeometry.add(new agxCollide.Box(Operations.ToAgxVec3(this.size))); break; case "Sphere": dynamicRBGeometry.add(new agxCollide.Sphere((this.size.x + this.size.y + this.size.z) / 3)); break; default: dynamicRBGeometry.add(new agxCollide.Box(Operations.ToAgxVec3(this.size))); break; } dynamicRBGeometry.setMaterial(new agx.Material(this.materialName)); agx_Object = new agx.RigidBody(); agx_Object.add(dynamicRBGeometry); agx_Object.setLocalPosition(Operations.ToAgxVec3(pos)); ///AgX agx_Object.setLocalRotation(new agx.Quat(rot.x, rot.y, rot.z, rot.w)); ///AgX agx_Object.getMassProperties().setMass(mass); if (isStatic) { agx_Object.setMotionControl(agx.RigidBody.MotionControl.STATIC); } if (AddToRobot) { AddToAssembly(); } else { Agx_Simulation.sim_Instance.add(agx_Object); } }
public AgX_Sensor(Guid guid, string materialName, Vector3 pos, Vector3 scale, double mass) { this.guid = guid; this.scale = scale; var dynamicRBGeometry = new agxCollide.Geometry();///AgX dynamicRBGeometry.add(new agxCollide.Box(Operations.ToAgxVec3(scale))); dynamicRBGeometry.setMaterial(new agx.Material(materialName)); agx_Object = new agx.RigidBody(); agx_Object.add(dynamicRBGeometry); agx_Object.setLocalPosition(Operations.ToAgxVec3(pos)); agx_Object.getMassProperties().setMass(mass); Agx_Simulation.sim_Instance.add(agx_Object); }