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); } } }
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>(); }
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); }
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; } } } }