Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
                }
            }
        }
Beispiel #5
0
        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;
                }
            }
        }
Beispiel #6
0
        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;
        }