/// <summary> /// Crée les éléments à classer /// </summary> public void Populate(int n, int width, int height) { Random random = new Random(); for (int i = 0; i < n; i++) { Troll3D.Entity entity = new Troll3D.Entity(Entity); entity.transform_.SetPosition( (float)random.NextDouble() * width - width / 2.0f, (float)random.NextDouble() * height - height / 2.0f, 0.0f); entity.transform_.SetScale(0.02f, 0.02f, 1.0f); MaterialDX11 material = new MaterialDX11(); material.SetMainColor(0.0f, 0.0f, 0.0f, 1.0f); MeshRenderer meshrenderer = entity.AddComponent <MeshRenderer>(); meshrenderer.material_ = material; meshrenderer.model_ = Quad.GetMesh(); Elements.Add(entity); ClusterId.Add(-1); } }
/// <summary> /// Construit une représentation graphique du Diagramme de Voronoi de la triangulation /// </summary> public void BuildVoronoi(WingedEdgeMesh mesh) { List <StandardVertex> lines = new List <StandardVertex>(); // On va commencer par construire les sommets correspondant aux centre des faces de la triangulation // qui sont les noeuds du diagramme de voronoir CleanVoronoi(); for (int i = 0; i < mesh.Faces.Count; i++) { // On récupère le centre de la face (barycentre) List <VertexWE> vertices = mesh.GetFaceVertices(mesh.Faces[i]); Vector3 center = vertices[0].Position + vertices[1].Position + vertices[2].Position; center = center / 3.0f; Troll3D.Entity entity = new Troll3D.Entity(Entity); entity.transform_.SetPosition( center.X, center.Y, 0.0f); entity.transform_.SetScale(0.02f, 0.02f, 1.0f); MaterialDX11 material = new MaterialDX11(); material.SetMainColor(0.0f, 1.0f, 1.0f, 1.0f); MeshRenderer meshrenderer = entity.AddComponent <MeshRenderer>(); meshrenderer.material_ = material; meshrenderer.model_ = Quad.GetMesh(); // On récupère les voisins List <FaceWE> neighbours = mesh.GetFaceNeighbours(mesh.Faces[i]); for (int j = 0; j < neighbours.Count; j++) { // On récupère le centre de la face (barycentre) List <VertexWE> verticesNeighbour = mesh.GetFaceVertices(neighbours[j]); Vector3 centerNeighbour = verticesNeighbour[0].Position + verticesNeighbour[1].Position + verticesNeighbour[2].Position; centerNeighbour = centerNeighbour / 3.0f; lines.Add(new StandardVertex(center)); lines.Add(new StandardVertex(centerNeighbour)); } VoronoiPoints.Add(entity); } if (lines.Count > 0) { (( LineRenderer )VoronoiLines.GetComponent(ComponentType.LineRenderer)).Display = true; (( LineRenderer )VoronoiLines.GetComponent(ComponentType.LineRenderer)).Vertices = lines; (( LineRenderer )VoronoiLines.GetComponent(ComponentType.LineRenderer)).UpdateRenderer(); } }
public void BuildVoronoi(WingedEdgeMesh mesh) { List <StandardVertex> lines = new List <StandardVertex>(); // We start by building the vertices corresponding to the face's center of the triangulation who are node of the Voronoi diagram CleanVoronoi(); for (int i = 0; i < mesh.Faces.Count; i++) { // We get back the face's center (barycentre) List <VertexWE> vertices = mesh.GetFaceVertices(mesh.Faces[i]); Vector3 center = vertices[0].Position + vertices[1].Position + vertices[2].Position; center = center / 3.0f; Troll3D.Entity entity = new Troll3D.Entity(Entity); entity.transform_.SetPosition( center.X, center.Y, 0.0f); entity.transform_.SetScale(0.02f, 0.02f, 1.0f); MaterialDX11 material = new MaterialDX11(); material.SetMainColor(0.0f, 1.0f, 1.0f, 1.0f); MeshRenderer meshrenderer = entity.AddComponent <MeshRenderer>(); meshrenderer.material_ = material; meshrenderer.model_ = Quad.GetMesh(); // We get back the neighbours List <FaceWE> neighbours = mesh.GetFaceNeighbours(mesh.Faces[i]); for (int j = 0; j < neighbours.Count; j++) { // On récupère le centre de la face (barycentre) List <VertexWE> verticesNeighbour = mesh.GetFaceVertices(neighbours[j]); Vector3 centerNeighbour = verticesNeighbour[0].Position + verticesNeighbour[1].Position + verticesNeighbour[2].Position; centerNeighbour = centerNeighbour / 3.0f; lines.Add(new StandardVertex(center)); lines.Add(new StandardVertex(centerNeighbour)); } VoronoiPoints.Add(entity); } if (lines.Count > 0) { (( LineRenderer )VoronoiLines.GetComponent(ComponentType.LineRenderer)).Display = true; (( LineRenderer )VoronoiLines.GetComponent(ComponentType.LineRenderer)).Vertices = lines; (( LineRenderer )VoronoiLines.GetComponent(ComponentType.LineRenderer)).UpdateRenderer(); } }
public void AddPoint(float x, float y) { Troll3D.Entity entity = new Troll3D.Entity(Entity); entity.transform_.SetPosition( x, y, 0.0f); entity.transform_.SetScale(0.02f, 0.02f, 1.0f); MaterialDX11 material = new MaterialDX11(); material.SetMainColor(1.0f, 0.0f, 1.0f, 1.0f); MeshRenderer meshrenderer = entity.AddComponent <MeshRenderer>(); meshrenderer.material_ = material; meshrenderer.model_ = Quad.GetMesh(); Points.Add(entity); }
public void AddCircleCenter(float x, float y, float radius) { Troll3D.Entity entityCircle = new Troll3D.Entity(Entity); entityCircle.transform_.RotateEuler(0.0f, 3.1415f / 2.0f, 0.0f); entityCircle.transform_.Translate(x, y, 0.0f); entityCircle.transform_.SetScale(radius, 1.0f, radius); LineRenderer lineRenderer = entityCircle.AddComponent <LineRenderer>(); lineRenderer.material_ = new MaterialDX11("vDefault.cso", "pUnlit.cso", "gDefaultLine.cso"); lineRenderer.material_.SetMainColor(0.0f, 1.0f, 0.0f, 1.0f); lineRenderer.Vertices = Circle.GetLines(30); lineRenderer.UpdateRenderer(); Circles.Add(entityCircle); Troll3D.Entity entity = new Troll3D.Entity(Entity); entity.transform_.SetPosition( x, y, 0.0f); entity.transform_.SetScale(0.02f, 0.02f, 1.0f); MaterialDX11 material = new MaterialDX11(); material.SetMainColor(0.0f, 1.0f, 0.0f, 1.0f); MeshRenderer meshrenderer = entity.AddComponent <MeshRenderer>(); meshrenderer.material_ = material; meshrenderer.model_ = Quad.GetMesh(); CircleCenter.Add(entity); }
public DynamicCubemap(int cubemapsize) { CubeMapSize = cubemapsize; // On commence par initialiser la description de la texture qui sera mise // à jour par cette classe TextureDescription = new Texture2DDescription() { Width = CubeMapSize, Height = CubeMapSize, MipLevels = 0, ArraySize = 6, // Comme on cherche à créer une cubemap, ArraySize est à 6 Format = Format.R32G32B32A32_Float, Usage = ResourceUsage.Default, BindFlags = BindFlags.ShaderResource | BindFlags.RenderTarget, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.GenerateMipMaps | ResourceOptionFlags.TextureCube, SampleDescription = new SampleDescription { Count = 1, Quality = 0 } }; //Création de la texture Texture = new Texture2D ( ApplicationDX11.Instance.Device, TextureDescription ); // Création d'un renderTargetDescription qui sera utilisé // par tout les autres RenderTargetView RenderTargetViewDescription rtvDesc = new RenderTargetViewDescription() { Format = TextureDescription.Format, Dimension = RenderTargetViewDimension.Texture2DArray, Texture2DArray = new RenderTargetViewDescription.Texture2DArrayResource() { MipSlice = 0, ArraySize = 1, } }; // Initialisation des 6 renderTargetView for (int i = 0; i < 6; i++) { // On utilise FirstArraySlice pour préciser sur quel "Slice", ou Texture, // on se trouve rtvDesc.Texture2DArray.FirstArraySlice = i; RenderTargetViews.Add(new RenderTargetView(ApplicationDX11.Instance.Device, Texture, rtvDesc)); } // Initialisation du ShaderResourceView ShaderResourceViewDescription SRVDescription = new ShaderResourceViewDescription() { Format = TextureDescription.Format, Dimension = SharpDX.Direct3D.ShaderResourceViewDimension.TextureCube, Texture2D = new ShaderResourceViewDescription.Texture2DResource() { MipLevels = 1, MostDetailedMip = 0 } }; SRV = new ShaderResourceView(ApplicationDX11.Instance.Device, Texture, SRVDescription); // Création des renderTarget foreach (RenderTargetView view in RenderTargetViews) { RenderTargets.Add(new RenderTarget(view, CubeMapSize, CubeMapSize)); } // Création de la transformation Transform = new Transform(); // Création des caméras for (int i = 0; i < 6; i++) { Entity entity = new Entity(); Camera cam = entity.AddComponent <Camera>(); cam.Initialize(new FrustumProjection(3.141592f / 2.0f, 1.0f, 0.1f, 1000.0f)); cam.SetViewport(0, 0, CubeMapSize, cubemapsize); Cameras.Add(cam); } // Right Camera Cameras[0].m_transform.LookAt(new Vector3(1.0f, 0.0f, 0.0F), Transform.position_); // Left Camera Cameras[1].m_transform.LookAt(new Vector3(-1.0f, 0.0f, 0.0F), Transform.position_); // Up Camera Cameras[2].m_transform.LookAt(Vector3.Up + new Vector3(0.0f, 0.0f, 0.00001f), Transform.position_); // Down Camera Cameras[3].m_transform.LookAt(Vector3.Down + new Vector3(0.0f, 0.0f, 0.00001f), Transform.position_); // Forward Camera Cameras[4].m_transform.LookAt(Vector3.ForwardLH, Transform.position_); // Backward Camera Cameras[5].m_transform.LookAt(Vector3.BackwardLH, Transform.position_); ApplicationDX11.Instance.Cubemaps.Add(this); }