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); }
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(); } }