Ejemplo n.º 1
0
 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;
         }
     }
 }
Ejemplo n.º 2
0
        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
                }
            }
        }
Ejemplo n.º 3
0
 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());
            }
Ejemplo n.º 7
0
        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"));
                }
            }
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 12
0
        /// <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;
        }
Ejemplo n.º 13
0
 public Surface(Material_ material, String imgUri)
 {
     this.material = material;
     imageUri      = imgUri;
 }
Ejemplo n.º 14
0
        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
        }
Ejemplo n.º 15
0
 public void SetMaterial(Material_ material)
 {
     this.material = material;
     SetSliders();
 }