Exemple #1
0
 private void trackBar1_Scroll(object sender, EventArgs e)
 {
     mg          = new Graph3DData(trackBar1.Value, trackBar1.Value);
     NeedRecalc  = true;
     label5.Text = string.Format("{0}x{1} {2} triangles", mg.w, mg.h, mg.w * mg.h * 2);
 }
Exemple #2
0
        private void Draw3DGraph(Graph3DData gr, Draw3DMode mode)
        {
            double maxgr = gr.data.Max();
            double mingr = gr.data.Min();

            if (maxgr - mingr == 0)
            {
                maxgr = 0.01;
            }

            if (mode == Draw3DMode.Trias)
            {
                GL.Begin(BeginMode.Triangles);

                for (int i = 0; i < gr.w - 1; i++)
                {
                    for (int j = 0; j < gr.h - 1; j++)
                    {
                        var cc = 240 - ((gr.data[i * gr.w + j] - mingr) / (maxgr - mingr)) * 240.0;
                        if (cc < 0 || cc > 360)
                        {
                            cc = 180;
                        }
                        // GL.Color3(ColorFromHSV(cc, 1, 1));
                        GL.Color3(gr.data[i * gr.w + j] / maxgr, 0, 1 - gr.data[i * gr.w + j] / maxgr);
                        GL.Vertex3((i / (double)gr.w) * 2 - 1, gr.data[i * gr.w + j] / 2.0, (j / (double)gr.h) * 2 - 1);
                        GL.Color3(gr.data[(i + 1) * gr.w + j] / maxgr, 0, 1 - gr.data[(i + 1) * gr.w + j] / maxgr);
                        GL.Vertex3(((i + 1) / (double)gr.w) * 2 - 1, gr.data[(i + 1) * gr.w + j] / 2.0, (j / (double)gr.h) * 2 - 1);
                        GL.Color3(gr.data[(i) * gr.w + j + 1] / maxgr, 0, 1 - gr.data[(i) * gr.w + j + 1] / maxgr);
                        GL.Vertex3(((i) / (double)gr.w) * 2 - 1, gr.data[(i) * gr.w + j + 1] / 2.0,
                                   ((j + 1) / (double)gr.h) * 2 - 1);

                        GL.Color3(gr.data[(i) * gr.w + j + 1] / maxgr, 0, 1 - gr.data[(i) * gr.w + j + 1] / maxgr);
                        GL.Vertex3(((i) / (double)gr.w) * 2 - 1, gr.data[(i) * gr.w + (j + 1)] / 2.0,
                                   ((j + 1) / (double)gr.h) * 2 - 1);
                        GL.Color3(gr.data[(i + 1) * gr.w + j] / maxgr, 0, 1 - gr.data[(i + 1) * gr.w + j] / maxgr);
                        GL.Vertex3(((i + 1) / (double)gr.w) * 2 - 1, gr.data[(i + 1) * gr.w + j] / 2.0, (j / (double)gr.h) * 2 - 1);
                        GL.Color3(gr.data[(i + 1) * gr.w + j + 1] / maxgr, 0, 1 - gr.data[(i + 1) * gr.w + j + 1] / maxgr);
                        GL.Vertex3(((i + 1) / (double)gr.w) * 2 - 1, gr.data[(i + 1) * gr.w + j + 1] / 2.0,
                                   ((j + 1) / (double)gr.h) * 2 - 1);
                    }
                }

                GL.End();
            }
            else if (mode == Draw3DMode.Dots)
            {
                GL.Begin(BeginMode.Points);

                for (int i = 0; i < gr.w - 1; i++)
                {
                    for (int j = 0; j < gr.h - 1; j++)
                    {
                        GL.Color3(Color.Red);
                        GL.Vertex3((i / (double)gr.w) * 2 - 1, gr.data[i * gr.w + j] / 2.0, (j / (double)gr.h) * 2 - 1);
                    }
                }

                GL.End();
            }
            else if (mode == Draw3DMode.Lines)
            {
                GL.Begin(BeginMode.Lines);

                for (int i = 0; i < gr.w - 1; i++)
                {
                    for (int j = 0; j < gr.h - 1; j++)
                    {
                        GL.Color3(Color.Red);
                        GL.Vertex3((i / (double)gr.w) * 2 - 1, gr.data[i * gr.w + j] / 2.0, (j / (double)gr.h) * 2 - 1);
                        GL.Vertex3((i / (double)gr.w) * 2 - 1, gr.data[i * gr.w + j + 1] / 2.0, ((j + 1) / (double)gr.h) * 2 - 1);
                    }
                }

                GL.End();
            }
        }