Пример #1
0
        private void MixColor(Vertex v1, Vertex v2, float t, int curX, int curY)
        {
            RenderData.Color finalColor = new RenderData.Color(1, 1, 1);
            if (rendMode == RenderMode.Textured)
            {
                if (v1.depth == 0)
                {
                    Console.WriteLine();
                }
                float w = Mathf.Lerp(v1.depth, v2.depth, t);
                w = 1 / w;
                if (isOpenLight)
                {
                    Mathf.Lerp(ref finalColor, v1.lightingColor, v2.lightingColor, t);
                    finalColor *= w;
                }
                if (!isOpenTexture)
                {
                    //颜色和光照混合
                    RenderData.Color temp = new RenderData.Color();
                    Mathf.Lerp(ref temp, v1.pointColor, v2.pointColor, t);
                    finalColor = temp * w * finalColor;
                }
                else
                {
                    //uv坐标
                    int u = (int)(Mathf.Lerp(v1.u, v2.u, t) * w * (imgWidth - 1));
                    int v = (int)(Mathf.Lerp(v1.v, v2.v, t) * w * (imgHeight - 1));

                    //纹理颜色
                    finalColor = new RenderData.Color(Tex(u, v)) * finalColor;
                    if (!(finalColor.R >= 0 && finalColor.R <= 255))
                    {
                        Console.WriteLine();
                    }
                }
            }
            if (curX >= 0 && curY >= 0 && curX < width && curY < height)
            {
                frameBuff.SetPixel(curX, curY, finalColor.TransToSystemColor());
            }
        }
Пример #2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            Image img = Image.FromFile(Environment.CurrentDirectory + @"\..\..\Texture\texture.jpg");

            Control.CheckForIllegalCrossThreadCalls = false;
            texture = new Bitmap(img, imgWidth, imgHeight);
            InitTexture();
            g             = CreateGraphics();
            frameBuff     = new Bitmap(width, height);
            frameG        = Graphics.FromImage(frameBuff);
            rendMode      = RenderMode.Textured;
            isOpenLight   = true;
            isOpenTexture = true;
            ambientColor  = new RenderData.Color(0.1f, 0.1f, 0.1f);
            mesh          = new Mesh(CubeTestData.PointList, CubeTestData.Indexs, CubeTestData.UVs, CubeTestData.VertColors,
                                     CubeTestData.Normals, QuadTestData.Mat);
            camera = new Camera(new Vector4(0, 4, 1, 1), new Vector4(0, 1, 0, 0), new Vector4(0, 4, 6, 1),
                                (float)Math.PI / 3, width / (float)height, 3, 30);
            light  = new Light(new Vector3(0, 10, 0), new RenderData.Color(1, 1, 1));
            thread = new Thread(new ThreadStart(Tick));
            thread.Start();
            pictureBox1.Hide();
        }