private void materialPreview_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("Object")) { object data = e.Data.GetData("Object"); Console.WriteLine(data.GetType()); if (data is Surface) { material = new Material_(((Surface)data).Material); material.colorR = material.colorR * 255; material.colorG = material.colorG * 255; material.colorB = material.colorB * 255; RenderMaterial(); SetSliders(); name_box.Text = material.name; } else if (data is Material_) { material = new Material_(((Material_)data)); RenderMaterial(); SetSliders(); name_box.Text = material.name; } } }
public void LoadGallery() { string currDirectory = System.AppDomain.CurrentDomain.BaseDirectory; #if FINAL string fullPath = currDirectory + "\\galleries\\materials\\"; #else string fullPath = Path.Combine(currDirectory, "..\\..\\galleries\\materials\\"); #endif string[] paths = Directory.GetFiles(fullPath); // TODO poprawić ścieżkę w finalnej wersji foreach (string path in paths) { string file = Path.GetFileNameWithoutExtension(path); List <Material_> mat = Material_.LoadMaterials(path); Material_ material = mat != null ? mat[0] : null; if (material != null) { //bezier.Name = file; #if FINAL string ImageUri = currDirectory + "\\galleries\\materials\\" + material.Name + ".png"; #else string ImageUri = AppDomain.CurrentDomain.BaseDirectory + "..\\..\\galleries\\materials\\" + material.Name + ".png"; #endif Add(new Surface(material, ImageUri)); // TODO poprawić ścieżkę w finalnej wersji } } }
private void InitializeMaterial() { material = new Material_("Default", 159, 182, 205, 0.8f, 0.8f, 0.8f, 0.1f, 0.1f, 0.1f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 500, 1); SetSliders(); RenderMaterial(); }
public void SaveGallery() { List <Material_> materials = new List <Material_>(); foreach (Surface material in Items) { materials.Add(material.Material); // TODO zapisać ikonę } Material_.SaveMaterials(materials, "../../galleries/MaterialsGallery.txt"); // TODO poprawić ścieżkę w finalnej wersji }
public static Material[] FromTSObject(dynamic[] tsArray) { if (tsArray is null) { return(null); } var list = new System.Collections.Generic.List <Material>(); foreach (var tsItem in tsArray) { list.Add(Material_.FromTSObject(tsItem)); } return(list.ToArray()); }
public static dynamic GetTSObject(Material[] dynArray) { if (dynArray is null) { return(null); } var list = new System.Collections.Generic.List <dynamic>(); foreach (var dynItem in dynArray) { list.Add(Material_.GetTSObject(dynItem)); } return(list.ToArray()); }
private Sprite getSprite(SpriteAtlas atlas, Material_ material) { Sprite sprite = atlas.GetSprite(material.tileset); if (sprite == null) { addNotFound(notFound, material.tileset, material.name); sprite = atlas.GetSprite("template"); } // Debug.Log("getting sprite " + material.tileset + " " + sprite); // Debug.Log(sprite.uv[0] + " " + sprite.uv[1] + " " + sprite.uv[2] + " " + sprite.uv[3]); // Debug.Log(sprite.textureRect); return(sprite); }
public void LoadGallery() { List <Material_> materials = Material_.LoadMaterials("../../galleries/MaterialsGallery.txt"); // TODO poprawić ścieżkę w finalnej wersji if (materials == null) { SaveGallery(); } else { foreach (Material_ material in materials) { Add(new Surface(material, "Ikony/Swiatla/" + material.name + ".png")); } } }
public EcsEntity generateItem(string typeName, string materialName, Vector3Int position, EcsEntity entity) { ItemType type = ItemTypeMap.getItemType(typeName); if (type == null) { Debug.LogError("Type " + typeName + " not found."); } Material_ material = MaterialMap.get().material(materialName); entity.Replace(new ItemComponent { material = material.id, type = typeName, materialString = material.name, volume = 1, weight = material.density * 1 }); entity.Replace(new PositionComponent { position = position }); entity.Replace(new NameComponent()); // entity.Replace(new ItemVisualComponent()); return(entity); }
public Surface SaveToGallery(Material_ material) { #if FINAL Surface surface = new Surface(material, AppDomain.CurrentDomain.BaseDirectory + "\\galleries\\materials\\" + material.Name + ".png"); List <Material_> mat = new List <Material_>() { material }; Material_.SaveMaterials(mat, AppDomain.CurrentDomain.BaseDirectory + "/galleries/materials/" + material.Name + ".mat"); #else Surface surface = new Surface(material, AppDomain.CurrentDomain.BaseDirectory + "..\\..\\galleries\\materials\\" + material.Name + ".png"); List <Material_> mat = new List <Material_>() { material }; Material_.SaveMaterials(mat, "../../galleries/materials/" + material.Name + ".mat"); #endif Modeler.Graphics.SurfaceRaytracer.SaveImage(material.Name, surface.ImageUri); return(surface); }
public static Bitmap Render(Material_ mat) { //System.Drawing.Graphics canvas = System.Drawing.Graphics.FromImage(output); //canvas.FillRectangle(Brushes.Black, 0, 0, xResolution, yResolution); material = mat; Vector3D directionVector = new Vector3D(); Color color; for (int i = 0; i < xResolution; i++) { for (int j = 0; j < yResolution; j++) { directionVector = vectorU * (i / (float)(xResolution - 1)) + vectorV * (j / (float)(yResolution - 1)); directionVector += topLeft; directionVector -= observer; directionVector.Normalize(); color = CalculateColor(observer, directionVector, 0); output.SetPixel(i, j, color); } } return(output); }
/// <summary> /// Build the grab texture. /// </summary> void RebuildTexture(IntVector2 totalPixels) { // Ensure our grab texture is the proper size if (grabTexture_ == null || grabTexture_.width != totalPixels.x || grabTexture_.height != totalPixels.y) { grabTexture_ = new Texture2D(totalPixels.x, totalPixels.y); grabTexture_.filterMode = FilterMode.Point; } // Recreate our render texture if needed if (renderTexture_ == null || !renderTexture_.IsCreated() || renderTexture_.width != totalPixels.x || renderTexture_.height != totalPixels.y) { if (renderTexture_ != null) { renderTexture_.Release(); renderTexture_ = null; } renderTexture_ = new RenderTexture(totalPixels.x, totalPixels.y, 0); renderTexture_.filterMode = FilterMode.Point; renderTexture_.Create(); renderTexture_.hideFlags = HideFlags.HideAndDontSave; } // Render our mesh into our render texture. var lastRT = RenderTexture.active; RenderTexture.active = renderTexture_; GL.PushMatrix(); GL.Clear(true, true, backgroundColor_); GL.LoadPixelMatrix(0, totalPixels.x, 0, totalPixels.y); SetupFontAndMesh(mesh_, font_, fontSize_, glyphString_, Material_, verticalOffset_); Material_.SetPass(0); // Render our primary mesh. Graphics.DrawMeshNow(mesh_.Mesh_, Vector3.zero, Quaternion.identity); // If we're using it, render our fallback mesh on top. if (!font_.dynamic && unsupportedGlyphHandling_ == UnsupportedGlyphHandling.Fallback && fallbackFont_ != null) { SetupFontAndMesh(fallbackMesh_, fallbackFont_, fallbackFontSize_, fallbackString_, FallbackMat_, fallbackVerticalOffset_); FallbackMat_.SetPass(0); Graphics.DrawMeshNow(fallbackMesh_.Mesh_, new Vector3(0, 0, -1), Quaternion.identity); } // Read our render into our grab texture. grabTexture_.ReadPixels(new Rect(0, 0, totalPixels.x, totalPixels.y), 0, 0); grabTexture_.Apply(false); GL.PopMatrix(); RenderTexture.active = lastRT; }
public Surface(Material_ material, String imgUri) { this.material = material; imageUri = imgUri; }
public void RenderViews(ViewportInfo viewportInfo, Scene scene) { #if MEASURE_TIMES DateTime ts = DateTime.Now; DateTime t1 = DateTime.Now; #endif if (pp.BackBufferWidth != viewportInfo.resX || pp.BackBufferHeight != viewportInfo.resY) { pp = new PresentParameters(); pp.SwapEffect = SwapEffect.Discard; pp.Windowed = true; pp.BackBufferWidth = viewportInfo.resX; pp.BackBufferHeight = viewportInfo.resY; pp.BackBufferFormat = Format.A8R8G8B8; if (d3d != null) { d3d.Dispose(); } if (device != null) { device.Dispose(); } d3d = new Direct3D(); device = new Device(d3d, 0, DeviceType.Hardware, handle, CreateFlags.HardwareVertexProcessing, pp); } #if MEASURE_TIMES DateTime t2 = DateTime.Now; TimeSpan t = t2 - t1; w.WriteLine("Tworzenie device'a " + t.Milliseconds); #endif //selectionTex = Texture.FromFile(device, "..\\..\\selectionTex.png"); #if MEASURE_TIMES t1 = DateTime.Now; device.SetRenderState(RenderState.Lighting, true); #endif int l = 0; if (scene.lights.Count == 0) { device.SetLight(0, defLight); device.EnableLight(0, true); device.EnableLight(1, false); } else { foreach (Light_ light_ in scene.lights) { Light light = new Light(); light.Diffuse = new Color4(light_.colorR, light_.colorG, light_.colorB); light.Position = light_.position; light.Range = 100; light.Attenuation0 = 10.0f / light_.power; if (light_.type == Light_Type.Point) { light.Type = LightType.Point; } else { light.Type = LightType.Spot; } light.Direction = light_.direction; device.SetLight(l, light); device.EnableLight(l, true); l++; } device.EnableLight(l + 1, false); } #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Tworzenie świateł " + t.Milliseconds); t1 = DateTime.Now; #endif device.SetRenderState(RenderState.FillMode, wireframe ? FillMode.Wireframe : FillMode.Solid); device.SetRenderState(RenderState.CullMode, Cull.Clockwise); device.SetRenderState(RenderState.ShadeMode, ShadeMode.Flat); #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("SetRenderState " + t.Milliseconds); t1 = DateTime.Now; #endif //Vertex[] vertices = new Vertex[scene.points.Count]; //List<int>[] vertexTriangle = new List<int>[scene.points.Count]; //Parallel.For(0, vertexTriangle.Length, index => vertexTriangle[index] = new List<int>()); ///*for(int i = 0; i < vertexTriangle.Length; ++i) //{ // vertexTriangle[i] = new List<int>(); //}*/ //int[] indices = new int[3 * scene.triangles.Count]; //int[] selIndices = new int[3 * scene.triangles.Count]; //uint numIndices = 0; //uint numSelIndices = 0; bool[] selPoints = new bool[scene.points.Count]; Parallel.For(0, selPoints.Length, index => selPoints[index] = false); /*for(int i = 0; i < selPoints.Length; ++i) * { * selPoints[i] = false; * }*/ bool[] selected = scene.GetSelectedTriangles(); #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("t1 " + t.Milliseconds); t1 = DateTime.Now; #endif for (int i = 0; i < scene.triangles.Count; ++i) { Triangle triangle = scene.triangles[i]; //if (selected[i] == false) //{ // scene.indices[numIndices] = (int)triangle.p1; // scene.indices[numIndices + 1] = (int)triangle.p3; // scene.indices[numIndices + 2] = (int)triangle.p2; // numIndices += 3; //} //else if (selected[i]) { //scene.selIndices[numSelIndices] = (int)triangle.p1; //scene.selIndices[numSelIndices + 1] = (int)triangle.p3; //scene.selIndices[numSelIndices + 2] = (int)triangle.p2; selPoints[triangle.p1] = true; selPoints[triangle.p2] = true; selPoints[triangle.p3] = true; //numSelIndices += 3; } //scene.vertexTriangle[triangle.p1].Add(i); //scene.vertexTriangle[triangle.p2].Add(i); //scene.vertexTriangle[triangle.p3].Add(i); } #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("t2 " + t.Milliseconds); t1 = DateTime.Now; #endif for (int i = 0; i < scene.points.Count; ++i) { if (selPoints[i] || scene.normals.Count <= i) { Vector3D normal = new Vector3D(); foreach (int face in scene.vertexTriangle[i]) { normal += Utilities.CalculateNormal(scene.points[(int)scene.triangles[face].p3], scene.points[(int)scene.triangles[face].p2], scene.points[(int)scene.triangles[face].p1]); } normal.Normalize(); if (scene.normals.Count <= i) { scene.normals.Add(normal); } else { scene.normals[i] = normal; } } } #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Liczenie normalnych " + t.Milliseconds); t1 = DateTime.Now; #endif Dictionary <string, int> matNames = new Dictionary <string, int>(); for (int i = 0; i < scene.materials.Count; ++i) { matNames.Add(scene.materials[i].name, i); } int[] trPart = new int[scene.triangles.Count]; for (int i = 0; i < scene.parts.Count; ++i) { for (int j = 0; j < scene.parts[i].triangles.Count; ++j) { trPart[scene.parts[i].triangles[j]] = i; } } for (int i = 0; i < scene.vertices.Length; ++i) { int partIndex = trPart[scene.vertexTriangle[i][0]]; String matName = scene.materialAssign[partIndex]; Material_ material = scene.materials[matNames[matName]]; Vector3D point = scene.points[i]; scene.vertices[i].Position = new Vector3(point.x, point.y, point.z); scene.vertices[i].Normal = new Vector3(scene.normals[i].x, scene.normals[i].y, scene.normals[i].z); scene.vertices[i].Color = Color.FromArgb((int)(255 * material.colorR), (int)(255 * material.colorG), (int)(255 * material.colorB)).ToArgb(); scene.vertices[i].tex0 = 0; scene.vertices[i].tex1 = 0; } #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Znajdowanie części i przyp. wierz. " + t.Milliseconds); t1 = DateTime.Now; #endif Mesh mesh = scene.numIndices >= 3 ? new Mesh(device, (int)scene.numIndices / 3, scene.points.Count, MeshFlags.Managed | MeshFlags.Use32Bit, vertexElems) : null; VertexBuffer vb = mesh != null ? mesh.VertexBuffer : null; IndexBuffer ib = mesh != null ? mesh.IndexBuffer : null; #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Tworzenie mesh1 " + t.Milliseconds); t1 = DateTime.Now; #endif if (mesh != null) { vb.Lock(0, 0, LockFlags.None).WriteRange(scene.vertices); vb.Unlock(); ib.Lock(0, 0, LockFlags.None).WriteRange(scene.indices, 0, (int)scene.numIndices); ib.Unlock(); #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Kopiowanie buforów mesh1 " + t.Milliseconds); #endif } #if MEASURE_TIMES t1 = DateTime.Now; #endif Mesh selMesh = scene.numSelIndices >= 3 ? new Mesh(device, (int)scene.numSelIndices / 3, scene.points.Count, MeshFlags.Managed | MeshFlags.Use32Bit, vertexElems) : null; VertexBuffer selvb = selMesh != null ? selMesh.VertexBuffer : null; IndexBuffer selib = selMesh != null ? selMesh.IndexBuffer : null; #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Tworzenie mesh2 " + t.Milliseconds); t1 = DateTime.Now; #endif if (selMesh != null) { selvb.Lock(0, 0, LockFlags.None).WriteRange(scene.vertices); selvb.Unlock(); selib.Lock(0, 0, LockFlags.None).WriteRange(scene.selIndices, 0, (int)scene.numSelIndices); selib.Unlock(); #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Kopiowanie buforów mesh2 " + t.Milliseconds); #endif } #if MEASURE_TIMES t1 = DateTime.Now; #endif device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); if (perspective.X != viewportInfo.posX[0] || perspective.Y != viewportInfo.posY[0] || perspective.Width != viewportInfo.sizeX[0] || perspective.Height != viewportInfo.sizeY[0]) { perspective = new Viewport(); perspective.X = viewportInfo.posX[0]; perspective.Y = viewportInfo.posY[0]; perspective.Width = viewportInfo.sizeX[0]; perspective.Height = viewportInfo.sizeY[0]; perspective.MinZ = 0; perspective.MaxZ = 1; } if (top.X != viewportInfo.posX[1] || top.Y != viewportInfo.posY[1] || top.Width != viewportInfo.sizeX[1] || top.Height != viewportInfo.sizeY[1]) { top = new Viewport(); top.X = viewportInfo.posX[1]; top.Y = viewportInfo.posY[1]; top.Width = viewportInfo.sizeX[1]; top.Height = viewportInfo.sizeY[1]; top.MinZ = 0; top.MaxZ = 1; } if (front.X != viewportInfo.posX[2] || front.Y != viewportInfo.posY[2] || front.Width != viewportInfo.sizeX[2] || front.Height != viewportInfo.sizeY[2]) { front = new Viewport(); front.X = viewportInfo.posX[2]; front.Y = viewportInfo.posY[2]; front.Width = viewportInfo.sizeX[2]; front.Height = viewportInfo.sizeY[2]; front.MinZ = 0; front.MaxZ = 1; } if (side.X != viewportInfo.posX[3] || side.Y != viewportInfo.posY[3] || side.Width != viewportInfo.sizeX[3] || side.Height != viewportInfo.sizeY[3]) { side = new Viewport(); side.X = viewportInfo.posX[3]; side.Y = viewportInfo.posY[3]; side.Width = viewportInfo.sizeX[3]; side.Height = viewportInfo.sizeY[3]; side.MinZ = 0; side.MaxZ = 1; } #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Modyfikacja viewport'ów " + t.Milliseconds); t1 = DateTime.Now; #endif if (perspective.Width > 0 && perspective.Height > 0) { device.Viewport = perspective; float camRotAngle = scene.cams.ElementAt(scene.activeCamera).rotateAngle; float aspect = (float)perspective.Width / perspective.Height; float angle = 2.0f * (float)Math.Atan(Math.Tan(Utilities.DegToRad(scene.cams.ElementAt(scene.activeCamera).fovAngle) / 2.0f) / aspect); device.SetTransform(TransformState.View, Matrix.LookAtRH( scene.cams[scene.activeCamera].position, scene.cams[scene.activeCamera].lookAt, Utilities.RotatePointAroundVector(new Vector3(0, 1, 0), Vector3.Normalize(scene.cams[scene.activeCamera].lookAt - scene.cams[scene.activeCamera].position), camRotAngle))); device.SetTransform(TransformState.Projection, Matrix.PerspectiveFovRH( angle, aspect, 0.01f, 20000)); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.FromArgb(230, 230, 230), 1.0f, 0); device.BeginScene(); if (mesh != null) { mesh.DrawSubset(0); } //device.SetTexture(0, selectionTex); device.SetRenderState(RenderState.Lighting, false); if (selMesh != null) { selMesh.DrawSubset(0); } device.SetRenderState(RenderState.Lighting, true); //device.SetTexture(0, null); device.EndScene(); } if (top.Width > 0 && top.Height > 0) { device.Viewport = top; device.SetTransform(TransformState.View, Matrix.LookAtRH( orthoPos[0], orthoLookAt[0], new Vector3(0, 1, 0))); device.SetTransform(TransformState.Projection, Matrix.OrthoRH( orthoWidht[0], (float)(top.Height) / top.Width * orthoWidht[0], 0.01f, 20000)); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.FromArgb(230, 230, 230), 1.0f, 0); device.BeginScene(); if (mesh != null) { mesh.DrawSubset(0); } //device.SetTexture(0, selectionTex); device.SetRenderState(RenderState.Lighting, false); if (selMesh != null) { selMesh.DrawSubset(0); } device.SetRenderState(RenderState.Lighting, true); //device.SetTexture(0, null); device.EndScene(); } if (front.Width > 0 && front.Height > 0) { device.Viewport = front; device.SetTransform(TransformState.View, Matrix.LookAtRH( orthoPos[1], orthoLookAt[1], new Vector3(0, 1, 0))); device.SetTransform(TransformState.Projection, Matrix.OrthoRH( orthoWidht[1], (float)(front.Height) / front.Width * orthoWidht[1], 0.01f, 20000)); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.FromArgb(230, 230, 230), 1.0f, 0); device.BeginScene(); if (mesh != null) { mesh.DrawSubset(0); } //device.SetTexture(0, selectionTex); device.SetRenderState(RenderState.Lighting, false); if (selMesh != null) { selMesh.DrawSubset(0); } device.SetRenderState(RenderState.Lighting, true); //device.SetTexture(0, null); device.EndScene(); } if (side.Width > 0 && side.Height > 0) { device.Viewport = side; device.SetTransform(TransformState.View, Matrix.LookAtRH( orthoPos[2], orthoLookAt[2], new Vector3(0, 1, 0))); device.SetTransform(TransformState.Projection, Matrix.OrthoRH( orthoWidht[2], (float)(side.Height) / side.Width * orthoWidht[2], 0.01f, 20000)); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.FromArgb(230, 230, 230), 1.0f, 0); device.BeginScene(); if (mesh != null) { mesh.DrawSubset(0); } //device.SetTexture(0, selectionTex); device.SetRenderState(RenderState.Lighting, false); if (selMesh != null) { selMesh.DrawSubset(0); } device.SetRenderState(RenderState.Lighting, true); //device.SetTexture(0, null); device.EndScene(); } #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Renderowanie " + t.Milliseconds); t1 = DateTime.Now; #endif device.Present(); #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Present " + t.Milliseconds); t1 = DateTime.Now; #endif //selectionTex.Dispose(); if (selMesh != null) { selvb.Dispose(); selib.Dispose(); selMesh.Dispose(); } if (mesh != null) { vb.Dispose(); ib.Dispose(); mesh.Dispose(); } #if MEASURE_TIMES t2 = DateTime.Now; t = t2 - t1; w.WriteLine("Czyszczenie " + t.Milliseconds); DateTime te = DateTime.Now; t = te - ts; w.WriteLine("Całość " + t.Milliseconds); w.WriteLine("-----------------------------------------------------------------"); w.WriteLine(); w.WriteLine(); w.WriteLine(); #endif }
public void SetMaterial(Material_ material) { this.material = material; SetSliders(); }