Пример #1
0
        //jumpFrame: 一次跳躍資料數
        public static void drawGL_FrameData_Triangle(SharpGL.OpenGL gl_object, FrameData_LJV7 frame, int jumpFrame)
        {
            gl_object.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT);

            //可以不用每次都旋轉,可以滑鼠動作時變更即可
            //不影響效能
            gl_object.LoadIdentity();
            gl_object.Translate(_LX, _LY, _LZ);
            gl_object.Rotate(_RoX, 0.0, 1.0, 0.0);
            gl_object.Rotate(_RoY, 1.0, 0.0, 0.0);
            gl_object.Rotate(_RoZ, 0.0, 0.0, 1.0);

            double x = 0, y = 0;
            double centerx = frame.size_per_frame / 2;
            double centery = frame.LJVcount / 2;
            double diff = frame.Max_Buffer_Compute - frame.Min_Buffer_Compute;
            double r = 0, g = 0, b = 0;
            double Color_H = 0.0;

            for (int j = 0; j < frame.LJVcount - jumpFrame; j += jumpFrame)
            {
                gl_object.Begin(OpenGL.TRIANGLE_STRIP);
                for (int i = 0; i < frame.size_per_frame - jumpFrame; i += jumpFrame)
                {
                    int pos = Convert.ToInt32(i * frame.LJVcount + j);
                    if (frame.buffer_compute[pos] == -999 || frame.buffer_compute[pos + jumpFrame] == -999)
                    {
                        gl_object.End();
                        gl_object.Begin(OpenGL.TRIANGLE_STRIP);
                        continue;
                    }
                    Color_H = (frame.buffer_compute[pos] - frame.Min_Buffer_Compute) / diff;
                    Color_H = Color_H * (MaxColorH - MinColorH) + MinColorH;
                    HsvToRgb(Color_H, 1.0, 1.0, out r, out g, out b);
                    gl_object.Color(r, g, b);

                    x = (Convert.ToDouble(i) - centerx) / Convert.ToDouble(100);
                    y = -(Convert.ToDouble(j) - centery) / Convert.ToDouble(100);
                    gl_object.Vertex(x, y, frame.buffer_compute[pos]);


                    Color_H = (frame.buffer_compute[pos + jumpFrame] - frame.Min_Buffer_Compute) / diff;
                    Color_H = Color_H * (MaxColorH - MinColorH) + MinColorH;
                    HsvToRgb(Color_H, 1.0, 1.0, out r, out g, out b);
                    gl_object.Color(r, g, b);

                    x = (Convert.ToDouble(i) - centerx) / Convert.ToDouble(100);
                    y = -(Convert.ToDouble(j + jumpFrame) - centery) / Convert.ToDouble(100);
                    gl_object.Vertex(x, y, frame.buffer_compute[pos + jumpFrame]);
                }
                gl_object.End();
            }

            //drawAxis(gl_object);
            gl_object.Flush();
            return;
        }
Пример #2
0
 //繪製原始資料3D
 //以面繪製
 public static void drawGL_FrameData_Triangle(SharpGL.OpenGL gl_object, FrameData_LJV7 frame)
 {
     drawGL_FrameData_Triangle(gl_object, frame, 4);
     return;
 }