Files
LM-Middleware/HexcalMC/Base/SharpGLViewportControl.cs
2025-03-29 16:20:59 +08:00

71 lines
1.5 KiB
C#

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<Point3D> pointCloud;
public SharpGLViewportControl()
{
InitializeComponent();
openGLControl = new OpenGLControl
{
Dock = DockStyle.Fill
};
Controls.Add(openGLControl);
openGLControl.OpenGLInitialized += OpenGLControl_OpenGLInitialized;
openGLControl.OpenGLDraw += OpenGLControl_OpenGLDraw;
pointCloud = new List<Point3D>();
}
public void SetPointCloud(List<Point3D> 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();
}
}
}