public PhysX.RigidStatic CreateTriangle(PhysX.Scene scene) { List <PhysX.Math.Vector3> Vertices = new List <PhysX.Math.Vector3>(); List <int> Indices = new List <int>(); PhysX.TriangleMeshDesc TriangleMeshDesc = new PhysX.TriangleMeshDesc() { Triangles = new int[12] { 0, 1, 2, 0, 3, 1, 3, 4, 1, 3, 5, 4 }, Points = new PhysX.Math.Vector3[6] { new PhysX.Math.Vector3 { X = 0, Y = 0, Z = 0 }, new PhysX.Math.Vector3 { X = 1, Y = 1, Z = 0 }, new PhysX.Math.Vector3 { X = 0, Y = 1, Z = 0 }, new PhysX.Math.Vector3 { X = 1, Y = 0, Z = 0 }, new PhysX.Math.Vector3 { X = 2, Y = 1, Z = 0 }, new PhysX.Math.Vector3 { X = 2, Y = 0, Z = 0 }, } }; MemoryStream ms = new MemoryStream(); PhysX.Cooking cook = scene.Physics.CreateCooking(); cook.CookTriangleMesh(TriangleMeshDesc, ms); cook.Dispose(); ms.Position = 0; PhysX.TriangleMesh triangleMesh = scene.Physics.CreateTriangleMesh(ms); PhysX.TriangleMeshGeometry triangleMeshShapeDesc = new PhysX.TriangleMeshGeometry(triangleMesh); //PhysX.Math.Matrix.RotationYawPitchRoll(0f, (float)Math.PI / 2, 0f) * PhysX.Math.Matrix.Translation(0f, 0f, 0f) var hfActor = scene.Physics.CreateRigidStatic(); hfActor.CreateShape(triangleMeshShapeDesc, scene.Physics.CreateMaterial(0.75f, 0.75f, 0.1f)); return(hfActor); }
public Tuple <PhysX.TriangleMesh, MemoryStream> GenerateTrimeshFromIndexedTriangles(PhysX.Math.Vector3[] points, int[] triangles) { PhysX.TriangleMeshDesc triangleMeshDesc = new PhysX.TriangleMeshDesc() { Triangles = triangles, Points = points, }; MemoryStream ms = new MemoryStream(); if (!_cooking.CookTriangleMesh(triangleMeshDesc, ms)) { throw new PhysxSdkException("TerrainMesher: GenerateTrimeshFromIndexedTriangles(): CookTriangleMesh() failed"); } ms.Position = 0; PhysX.TriangleMesh triangleMesh = _scene.Physics.CreateTriangleMesh(ms); return(new Tuple <PhysX.TriangleMesh, MemoryStream>(triangleMesh, ms)); }
public Tuple<PhysX.TriangleMesh, MemoryStream> GenerateTrimeshFromIndexedTriangles(PhysX.Math.Vector3[] points, int[] triangles) { PhysX.TriangleMeshDesc triangleMeshDesc = new PhysX.TriangleMeshDesc() { Triangles = triangles, Points = points, }; MemoryStream ms = new MemoryStream(); if (!_cooking.CookTriangleMesh(triangleMeshDesc, ms)) { throw new PhysxSdkException("TerrainMesher: GenerateTrimeshFromIndexedTriangles(): CookTriangleMesh() failed"); } ms.Position = 0; PhysX.TriangleMesh triangleMesh = _scene.Physics.CreateTriangleMesh(ms); return new Tuple<PhysX.TriangleMesh, MemoryStream>(triangleMesh, ms); }
private PhysX.TriangleMeshGeometry GeneratePhysXTrimeshShape(string primName, PrimitiveBaseShape shape, OpenMetaverse.Vector3 size, float LOD, bool isDynamic) { MeshingResult result = _mesher.CreateMesh(primName, shape, size, LOD, ShapeType.TriMesh, true); if (result == null) { return(null); } IMesh mesh = result.TriMesh; if (mesh == null) { return(null); } int[] indexes = mesh.getIndexListAsInt(); PhysX.Math.Vector3[] verts = PhysUtil.OmvVectorArrayToPhysx(mesh.getVertexListAsArray()); mesh.ReleaseSourceMeshData(); PhysX.TriangleMeshDesc desc = new PhysX.TriangleMeshDesc { Points = verts, Triangles = indexes, }; if (!desc.IsValid()) { m_log.Warn("[InWorldz.PhysxPhysics] Unable to create trimesh for shape. Invalid description."); return(null); } using (MemoryStream ms = new MemoryStream()) { try { if (!_cooking.CookTriangleMesh(desc, ms)) { m_log.Warn("[InWorldz.PhysxPhysics] Unable to create trimesh for shape."); return(null); } } catch (Exception e) { m_log.Warn("[InWorldz.PhysxPhysics] Unable to create trimesh for shape: {0}", e); return(null); } ms.Position = 0; try { PhysX.TriangleMesh triMesh = _scene.Physics.CreateTriangleMesh(ms); //m_log.DebugFormat("Trimesh Created: {0} {1}", triMesh.GetHashCode(), primName); PhysX.TriangleMeshGeometry triGeom = new PhysX.TriangleMeshGeometry(triMesh); return(triGeom); } catch (Exception e) { m_log.WarnFormat("[InWorldz.PhysxPhysics] Unable to create trimesh for shape: {0}", e); return(null); } } }
private PhysX.TriangleMeshGeometry GeneratePhysXTrimeshShape(string primName, PrimitiveBaseShape shape, OpenMetaverse.Vector3 size, float LOD, bool isDynamic) { MeshingResult result = _mesher.CreateMesh(primName, shape, size, LOD, ShapeType.TriMesh, true); if (result == null) return null; IMesh mesh = result.TriMesh; if (mesh == null) return null; int[] indexes = mesh.getIndexListAsInt(); PhysX.Math.Vector3[] verts = PhysUtil.OmvVectorArrayToPhysx(mesh.getVertexListAsArray()); mesh.ReleaseSourceMeshData(); PhysX.TriangleMeshDesc desc = new PhysX.TriangleMeshDesc { Points = verts, Triangles = indexes, }; if (!desc.IsValid()) { m_log.Warn("[InWorldz.PhysxPhysics] Unable to create trimesh for shape. Invalid description."); return null; } using (MemoryStream ms = new MemoryStream()) { try { if (!_cooking.CookTriangleMesh(desc, ms)) { m_log.Warn("[InWorldz.PhysxPhysics] Unable to create trimesh for shape."); return null; } } catch (Exception e) { m_log.Warn("[InWorldz.PhysxPhysics] Unable to create trimesh for shape: {0}", e); return null; } ms.Position = 0; try { PhysX.TriangleMesh triMesh = _scene.Physics.CreateTriangleMesh(ms); //m_log.DebugFormat("Trimesh Created: {0} {1}", triMesh.GetHashCode(), primName); PhysX.TriangleMeshGeometry triGeom = new PhysX.TriangleMeshGeometry(triMesh); return triGeom; } catch (Exception e) { m_log.WarnFormat("[InWorldz.PhysxPhysics] Unable to create trimesh for shape: {0}", e); return null; } } }
public PhysX.RigidStatic CreateTriangle(PhysX.Scene scene) { List<PhysX.Math.Vector3> Vertices = new List<PhysX.Math.Vector3>(); List<int> Indices = new List<int>(); PhysX.TriangleMeshDesc TriangleMeshDesc = new PhysX.TriangleMeshDesc() { Triangles = new int[12] { 0, 1, 2, 0, 3, 1, 3, 4, 1, 3, 5, 4 }, Points = new PhysX.Math.Vector3[6] { new PhysX.Math.Vector3 { X = 0, Y = 0, Z = 0 }, new PhysX.Math.Vector3 { X = 1, Y = 1, Z = 0 }, new PhysX.Math.Vector3 { X = 0, Y = 1, Z = 0 }, new PhysX.Math.Vector3 { X = 1, Y = 0, Z = 0 }, new PhysX.Math.Vector3 { X = 2, Y = 1, Z = 0 }, new PhysX.Math.Vector3 { X = 2, Y = 0, Z = 0 }, } }; MemoryStream ms = new MemoryStream(); PhysX.Cooking cook = scene.Physics.CreateCooking(); cook.CookTriangleMesh(TriangleMeshDesc, ms); cook.Dispose(); ms.Position = 0; PhysX.TriangleMesh triangleMesh = scene.Physics.CreateTriangleMesh(ms); PhysX.TriangleMeshGeometry triangleMeshShapeDesc = new PhysX.TriangleMeshGeometry(triangleMesh); //PhysX.Math.Matrix.RotationYawPitchRoll(0f, (float)Math.PI / 2, 0f) * PhysX.Math.Matrix.Translation(0f, 0f, 0f) var hfActor = scene.Physics.CreateRigidStatic(); hfActor.CreateShape(triangleMeshShapeDesc, scene.Physics.CreateMaterial(0.75f, 0.75f, 0.1f)); return hfActor; }