65.9K
CodeProject 正在变化。 阅读更多。
Home

SharpGL:C# OpenGL 类库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (169投票s)

2002 年 11 月 5 日

GPL3

5分钟阅读

viewsIcon

1994976

downloadIcon

63334

在 WinForms 或 WPF 应用程序中使用 OpenGL,可以直接使用,也可以通过强大的场景图。

sharpgl/SharpGL-Logo.jpg

SharpGL 是一个项目,可以让你轻松地在 Windows Forms 或 WPF 应用程序中使用 OpenGL!它包含了所有 OpenGL 功能,直到最新的 4.2 版本,所有主要的扩展,一个强大的场景图和 Visual Studio 的项目模板,你拥有创建引人注目的 3D 应用程序所需的所有工具——或者将现有代码移植到一个新平台。

太忙没时间阅读 SharpGL 的介绍?请查看 入门指南

一图胜千言,让我们先看一些截图!

卡通着色 - 这是最新的示例,它向你展示了如何使用现代 OpenGL 功能,如顶点缓冲区和着色器。很快就会写成一篇完整的文章。

径向模糊 - 径向模糊示例展示了如何使用标准的 OpenGL 函数创建高级照明效果。

sharpgl/RadialBlurSample.jpg

犹他茶壶 WPF 示例 - 直接在 WPF 应用程序中进行 OpenGL 渲染——无需 airspace 或 Windows Forms Host 对象。SharpGL OpenGLControl 在你的应用程序中提供了直接的 OpenGL 渲染表面。

sharpgl/WpfTeapotSample.jpg

纹理示例 - 通过利用 Texture 类等来加速 OpenGL 开发,该类用于将图像数据加载和转换为 OpenGL 纹理。

sharpgl/TexturesSample.jpg

命中测试示例 - 通过派生场景元素自 IBoundable,你可以让自己的自定义类参与命中测试。

sharpgl/HitTestSample.jpg

SharpGL 是什么?

SharpGL 是一组类库,它允许你在代码中使用 OpenGL 功能。类库有

SharpGL - 包含主要的 OpenGL 对象——该对象封装了所有 OpenGL 函数、枚举和扩展。

SharpGL.SceneGraph - 包含所有 OpenGL 对象和场景元素的包装器——灯光、材质、纹理、NURBS、着色器等。

SharpGL.WinForms - 包含用于你的应用程序的 Windows Forms 控件。

SharpGL.WPF - 包含用于你的应用程序的 WPF 控件。

SharpGL.Serialization - 包含用于从 3D Studio Max 文件、Discreet obj 文件和 trueSpace 文件加载几何和数据的类。

通过这些库,SharpGL 为你提供了对所有当前 OpenGL 函数、所有主要扩展和一套丰富的对象以实现高级功能的包装。你可以使用 SharpGL 执行“传统”的 OpenGL 绘图,也可以使用场景图来实现更具应用特定任务的功能。

如何使用 SharpGL?

很简单!如果你有一段像下面这样的代码

//  Set the line width and point size.
glLineWidth(3.0f);
glPointSize(2.0f);

那么它会被写成

//  Get a reference to the OpenGL object.
OpenGL gl = openGLCtrl1.OpenGL;

//  Set the line width and point size.
gl.LineWidth(3.0f);
gl.PointSize(2.0f);

这是第一个基本规则——任何以“gl”或“glu”开头的 OpenGL 函数都是 SharpGL.OpenGL 对象的一个成员函数,并且去掉了“gl”或“glu”前缀。

这处理了最基本的功能——然而,这个规则有一个例外。下面的代码

//  Set the color.
glColor3f(0.5f, 0.5f, 0.5f);

//  Output some vertices.
glVertex3f(2.0f, 3.0f 4.0f);
glVertex4f(2.0f, 1.0f, 10.0f, 1.0f);

将被写成

//  Set the color.
gl.Color3(0.5f, 0.5f, 0.5f);

//  Output some vertices.
gl.Vertex3(2.0f, 3.0f 4.0f);
gl.Vertex4(2.0f, 1.0f, 10.0f, 1.0f);

注意函数末尾的“f”的缺失。这是第二个基本规则——SharpGL 包装函数从不带类型后缀。OpenGL 函数经常以“f”(表示浮点数)、“fv”(表示浮点数向量)、“i”(表示整数)等结尾。我们在 C# 中不需要唯一的名称,所以我们不将这些后缀应用于函数名。我们确实保留了数字——例如,当传入数组时,包装器需要知道要使用多少个元素。

这处理了接受基本类型作为参数的函数。对于其他类型的函数,我们还有一件事需要记住。下面的代码

//  Set the polygon mode.
glPolygonMode(GL_FRONT, GL_FILL);

被写成

//  Set the polygon mode.
gl.PolygonMode(OpenGL.GL_FRONT, OpenGL.GL_FILL);

//  Set the polygon mode.
gl.PolygonMode(PolygonFace.Front, PolygonMode.Fill);

这描述了最后一个基本规则。OpenGL 常量都定义为 SharpGL.OpenGL 类的常量成员,并且名称完全相同

这说明了如何使用 SharpGL 编写“标准”C OpenGL 代码。为了方便程序员,许多标准的 OpenGL 函数都有接受强类型的重载。在上面的代码片段(PolygonMode)中,我们可以使用 OpenGL 常量或 PolygonFace 和 PolygonMode 枚举——两者都是完全有效的。前者更符合典型的 C 代码,后者为开发人员提供了更多智能提示来提供帮助。

使用 SharpGL 进行编码

使用 SharpGL 进行编码非常直接。你会注意到的好处包括

代码提示和智能感知

sharpgl/Screenshot_CodeHints.png

所有核心 OpenGL 函数都已完整记录,这意味着你在键入时就能获得所需信息——减少翻阅《红宝书》的时间,提高工作效率。

核心函数的枚举

sharpgl/Screenshot_Enumerations.png

通过使用类型安全的枚举来实现核心函数,从而提高可读性并减少错误。

支持到 4.2 的扩展和核心

sharpgl/Screenshot_Extensions.png

所有主要的扩展函数都可用,已弃用的函数已标记为弃用,已包含在标准中的扩展同时以扩展形式和核心形式存在。

你的第一个 SharpGL 应用程序

你可以在五分钟内运行一个 SharpGL 应用程序——方法如下。

1. 安装 SharpGL Visual Studio 扩展

下载 SharpGL Visual Studio 扩展并解压。双击 *.vsix 文件——将显示安装确认。选择“安装”。

sharpgl/ConfirmInstallation.png

2. 运行 Visual Studio 并创建新项目

运行 Visual Studio 并选择“新建项目”。你会看到在 C# 下面有两个新模板——SharpGL Windows Forms 应用程序和 SharpGL WPF 应用程序。选择你偏好的平台。

sharpgl/NewWpfApplication.png

3. 运行应用程序

按 Ctrl+F5 或按“运行”。你的新 SharpGL 应用程序将启动,显示一个旋转的立方体。默认情况下,你有三个函数

OpenGLDraw - 用于进行 OpenGL 渲染。
OpenGLInitialized - 用于执行任何 OpenGL 初始化。
Resize - 用于创建投影变换。

模板附带的代码会为你处理基础工作——并且提供了许多示例应用程序,以及用于你自己的项目的源代码基线。

sharpgl/WpfApp.png

相关文章

SharpGL 很大。OpenGL 很大,而且现在非常成熟。为了避免在这篇文章中塞入太多细节,我将单独撰写关于特定主题的文章。如果你有任何建议或问题,请在下方评论。

中的 OpenGL - 入门

SharpGL 文档

在 WPF 应用程序中使用 SharpGL

保持更新

关于 SharpGL 开发的最新信息可以在 SharpGL CodePlex 站点或 SharpGL GitHub 站点上找到。你始终可以从 Nuget 获取最新的二进制文件,只需查看 入门指南

我在我的博客 http://www.dwmkerr.com 上撰写关于开发 SharpGL 时遇到的各种有趣领域。

© . All rights reserved.