我正在使用SharpGL库在WPF中实现2D图形.我已经设法在屏幕上绘制一些原始对象,我需要检测这些对象上的鼠标点击.
我已经看过一个关于如何在图形对象上执行选择和拾取的OpenGL教程,但是我没有设法让它工作.在我的测试应用程序中,我在屏幕上绘制了三个三角形,当鼠标单击时,我在GL_SELECT模式下绘制相同的三个三角形,希望检测是否已经点击了任何三角形.我不确定这是否是正确的方法.命中测试始终返回选择缓冲区中的所有元素.
我知道PickMatrix中的宽度和高度参数不正确,我不确定那里的正确值是什么.它是整个视图的宽度和高度吗?
private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
{
//// Get the OpenGL object.
OpenGL gl = args.OpenGL;
//set background to white
gl.ClearColor(1.0f, 1.0f, 1.0f, 1.0f);
//// Clear the color and depth buffer.
gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
DrawScene();
gl.Flush();
}
private void DrawScene()
{
OpenGL gl = openGLControl.OpenGL;
gl.Color(1.0, 0.0, 0.0);
DrawTriangle(-0.2, 0.6, 0.0, 0.8, 0.2, 0.6);
gl.Color(0.0, 1.0, 0.0);
DrawTriangle(-0.2, 0.2, 0.0, 0.4, 0.2, 0.2);
gl.Color(0.0, 0.0, 1.0);
DrawTriangle(-0.2, -0.2, 0.0, 0.0, 0.2, -0.2);
}
private void …Run Code Online (Sandbox Code Playgroud) 我需要从 netcore 3.1 应用程序获取 macOS 上的屏幕截图。不幸的是当前实施的是System.Drawing.Graphics.CopyFromScreenthows PlatformNotSupportedException。但是还有什么其他最简单的方法(也许通过 OpenGL 或 GTK)获取屏幕截图呢?
我正在开发一个程序的一部分,给出一组xyz坐标,一个3D模型.我已完成此图片所需的所有功能(即平移,旋转,缩放),但是给出的xyz坐标越多,程序运行的速度就越慢.处理29,000个坐标时我的程序运行得非常顺利,但是当我有300,000个点时,我的程序变慢了.我正在使用SharpGL在WPF中使用OpenGL.插入所有这些点的代码如下所示:
gl.Begin(OpenGL.GL_LINES);
for (int i = 0; i < (parser.dataSet.Count - 1); i++)
{
gl.Color(1.0f, 0.0f, 0.0f);
gl.Vertex(parser.dataSet[i].X / parser.xDiv, parser.dataSet[i].Y / parser.yDiv, parser.dataSet[i].Z);
gl.Vertex(parser.dataSet[i + 1].X / parser.xDiv, parser.dataSet[i + 1].Y / parser.yDiv, parser.dataSet[i + 1].Z);
}
gl.End();
gl.Flush();
Run Code Online (Sandbox Code Playgroud)
我在做一些我能解决的事情(我不熟悉OpenGL)吗?有些人提到缩小我的数据,我并不完全反对,但有没有办法在图片上"缩放"(重新缩放)时"缩放"?