Exemple #1
0
        public void CookConvexMesh()
        {
            string teapotXml;

            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PhysX.Test.Resources.Teapot.DAE"))
            {
                var streamReader = new StreamReader(stream);

                teapotXml = streamReader.ReadToEnd();
            }

            using (var physics = CreatePhysicsAndScene())
            {
                var colladaLoader = new ColladaLoader();

                // Read the vertices and indices from the Teapot.DAE collada file
                // This file is copied out to the TestResults folder using the DeploymentItem attribute on this class
                var teapot = colladaLoader.Load(teapotXml);

                using (var cooking = physics.Physics.CreateCooking())
                {
                    var desc = new ConvexMeshDesc();
                    desc.SetTriangles(teapot.Indices);
                    desc.SetPositions(teapot.Vertices);
                    desc.Flags = ConvexFlag.ComputeConvex;

                    var stream = new MemoryStream();

                    var result = cooking.CookConvexMesh(desc, stream);

                    Assert.IsFalse(physics.ErrorOutput.HasErrors, physics.ErrorOutput.LastError);
                    Assert.AreEqual(ConvexMeshCookingResult.Success, result);
                }
            }
        }
Exemple #2
0
        protected override void OnLoad(System.EventArgs e)
        {
            VSync = VSyncMode.On;

            GL.Enable(EnableCap.Texture2D);
            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.CullFace);
            GL.CullFace(CullFaceMode.Back);
            GL.FrontFace(FrontFaceDirection.Cw);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
            GL.ClearColor(Color.FromArgb(255, 24, 24, 24));

            multisampling = new Multisampling(Width, Height, 8);
            defaultShader = new DefaultShader();

            model = ColladaLoader.Load(modelName);
            model.CreateVBOs();
            model.LoadTextures();
            model.Bind(defaultShader.ShaderProgram,
                       defaultShader.Texture,
                       defaultShader.HaveTexture,
                       defaultShader.Ambient,
                       defaultShader.Diffuse,
                       defaultShader.Specular,
                       defaultShader.Shininess);
        }
        public ObjectController(GameObject cache)
        {
            _objectCache = cache;

            _objLoader     = new OBJLoader();
            _colladaLoader = new ColladaLoader();
            _stlLoader     = new StlLoader();
            _meshCache     = new Dictionary <string, GameObject>();
        }
Exemple #4
0
        private void CreateConvexMesh(Scene scene, Material material)
        {
            var colladaLoader = new ColladaLoader();
            var bunny         = colladaLoader.Load(@"Teapot.DAE", this.Engine.GraphicsDevice);

            var convexMeshDesc = new ConvexMeshDesc
            {
                Flags = ConvexFlag.ComputeConvex
            };

            convexMeshDesc.SetPositions(bunny.VertexPositions);
            convexMeshDesc.SetTriangles(bunny.Indices);

            var cooking = scene.Physics.CreateCooking();

            var stream     = new MemoryStream();
            var cookResult = cooking.CookConvexMesh(convexMeshDesc, stream);

            stream.Position = 0;

            var convexMesh = scene.Physics.CreateConvexMesh(stream);

            var convexMeshGeom = new ConvexMeshGeometry(convexMesh)
            {
                Scale = new MeshScale(new Vector3(0.3f, 0.3f, 0.3f), Quaternion.Identity)
            };

            var rigidActor = scene.Physics.CreateRigidDynamic();

            // TODO: The Shape created here is now also an owner of the ConvexMesh object,
            // this needs to be incorp into the ObjectTable ownership logic
            rigidActor.CreateShape(convexMeshGeom, material);

            rigidActor.GlobalPose =
                Matrix4x4.CreateRotationX(-(float)System.Math.PI / 2) *
                Matrix4x4.CreateTranslation(0, 80, 0);

            scene.AddActor(rigidActor);
        }
Exemple #5
0
            public void ModifyObject()
            {
                if (m_fileSystem != null)
                {
                    string ext = Path.GetExtension(m_fileName);

                    switch (ext.ToLower())
                    {
                    case ".obj":
                    {
                        OBJLoader objLoader = new OBJLoader(m_fileName, m_fileSystem);

                        m_model.SetData(objLoader.Vertices, objLoader.Indices, objLoader.Length, ModelVertexInfo.GetVertexInfo <Vertex>());

                        break;
                    }

                    case ".dae":
                    {
                        ColladaLoader colladaLoader = new ColladaLoader(null, m_fileName, m_fileSystem);

                        int modelCount = colladaLoader.ModelCount;

                        Vertex[] vertices;
                        uint[]   indicies;
                        float    len;

                        float                     maxLen        = 0.0f;
                        List <Vertex>             finalVertices = new List <Vertex>();
                        List <uint>               finalIndicies = new List <uint>();
                        Dictionary <Vertex, uint> vertexLookup  = new Dictionary <Vertex, uint>();

                        for (int i = 0; i < modelCount; ++i)
                        {
                            colladaLoader.GenerateModelData(i, out vertices, out indicies, out len);

                            maxLen = Math.Max(maxLen, len);

                            uint indexCount = (uint)indicies.LongLength;

                            for (uint j = 0; j < indexCount; ++j)
                            {
                                Vertex vertex = vertices[indicies[j]];

                                if (vertexLookup.ContainsKey(vertex))
                                {
                                    finalIndicies.Add(vertexLookup[vertex]);
                                }
                                else
                                {
                                    uint index = (uint)finalVertices.Count;

                                    vertexLookup.Add(vertex, index);
                                    finalVertices.Add(vertex);
                                    finalIndicies.Add(index);
                                }
                            }
                        }

                        vertices = finalVertices.ToArray();
                        indicies = finalIndicies.ToArray();

                        m_model.SetData(vertices, indicies, maxLen, ModelVertexInfo.GetVertexInfo <Vertex>());

                        break;
                    }
                    }
                }
            }