using SharpGL; using SharpGL.SceneGraph; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using Telerik.WinControls.UI; namespace HexcalMC.Base { public partial class SharpGLViewportControl : UserControl { private readonly OpenGLControl openGLControl; private List pointCloud; public SharpGLViewportControl() { InitializeComponent(); openGLControl = new OpenGLControl { Dock = DockStyle.Fill }; Controls.Add(openGLControl); openGLControl.OpenGLInitialized += OpenGLControl_OpenGLInitialized; openGLControl.OpenGLDraw += OpenGLControl_OpenGLDraw; pointCloud = new List(); } public void SetPointCloud(List points) { pointCloud = points; openGLControl.Invalidate();// 重绘 } private void OpenGLControl_OpenGLInitialized(object sender, EventArgs e) { var gl = openGLControl.OpenGL; gl.Enable(OpenGL.GL_DEPTH_TEST); // 设置清除背景色为黑色 gl.ClearColor(0.0f, 0.0f, 1.0f, 0.0f); } private void OpenGLControl_OpenGLDraw(object sender, RenderEventArgs args) { var gl = openGLControl.OpenGL; gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); gl.Begin(OpenGL.GL_POINTS); gl.Color(Color.White); foreach (var point in pointCloud) { // 设置点的颜色 gl.Color(1.0f, 0.0f, 0.0f); // 红色 // 设置点的大小 gl.PointSize(5.0f); // 大小为5个单位 gl.Vertex(point.X, point.Y, point.Z); } gl.End(); } } }