//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; }
//繪製原始資料3D //以面繪製 public static void drawGL_FrameData_Triangle(SharpGL.OpenGL gl_object, FrameData_LJV7 frame) { drawGL_FrameData_Triangle(gl_object, frame, 4); return; }