SharpGL:C# OpenGL 类库
在 WinForms 或 WPF 应用程序中使用 OpenGL,可以直接使用,也可以通过强大的场景图。
- GitHub 源码
- 下载 Visual Studio 2010 扩展
- 下载 Visual Studio 2012/2013 扩展
- 下载示例 - 4.8 MB
- 下载核心二进制文件.zip - 984 KB
SharpGL 是一个项目,可以让你轻松地在 Windows Forms 或 WPF 应用程序中使用 OpenGL!它包含了所有 OpenGL 功能,直到最新的 4.2 版本,所有主要的扩展,一个强大的场景图和 Visual Studio 的项目模板,你拥有创建引人注目的 3D 应用程序所需的所有工具——或者将现有代码移植到一个新平台。
太忙没时间阅读 SharpGL 的介绍?请查看 入门指南。
一图胜千言,让我们先看一些截图!
卡通着色 - 这是最新的示例,它向你展示了如何使用现代 OpenGL 功能,如顶点缓冲区和着色器。很快就会写成一篇完整的文章。
径向模糊 - 径向模糊示例展示了如何使用标准的 OpenGL 函数创建高级照明效果。
犹他茶壶 WPF 示例 - 直接在 WPF 应用程序中进行 OpenGL 渲染——无需 airspace 或 Windows Forms Host 对象。SharpGL OpenGLControl 在你的应用程序中提供了直接的 OpenGL 渲染表面。
纹理示例 - 通过利用 Texture 类等来加速 OpenGL 开发,该类用于将图像数据加载和转换为 OpenGL 纹理。
命中测试示例 - 通过派生场景元素自 IBoundable,你可以让自己的自定义类参与命中测试。
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 进行编码非常直接。你会注意到的好处包括
代码提示和智能感知
所有核心 OpenGL 函数都已完整记录,这意味着你在键入时就能获得所需信息——减少翻阅《红宝书》的时间,提高工作效率。
核心函数的枚举
通过使用类型安全的枚举来实现核心函数,从而提高可读性并减少错误。
支持到 4.2 的扩展和核心
所有主要的扩展函数都可用,已弃用的函数已标记为弃用,已包含在标准中的扩展同时以扩展形式和核心形式存在。
你的第一个 SharpGL 应用程序
你可以在五分钟内运行一个 SharpGL 应用程序——方法如下。
1. 安装 SharpGL Visual Studio 扩展
下载 SharpGL Visual Studio 扩展并解压。双击 *.vsix 文件——将显示安装确认。选择“安装”。
2. 运行 Visual Studio 并创建新项目
运行 Visual Studio 并选择“新建项目”。你会看到在 C# 下面有两个新模板——SharpGL Windows Forms 应用程序和 SharpGL WPF 应用程序。选择你偏好的平台。
3. 运行应用程序
按 Ctrl+F5 或按“运行”。你的新 SharpGL 应用程序将启动,显示一个旋转的立方体。默认情况下,你有三个函数
OpenGLDraw - 用于进行 OpenGL 渲染。
OpenGLInitialized - 用于执行任何 OpenGL 初始化。
Resize - 用于创建投影变换。
模板附带的代码会为你处理基础工作——并且提供了许多示例应用程序,以及用于你自己的项目的源代码基线。
相关文章
SharpGL 很大。OpenGL 很大,而且现在非常成熟。为了避免在这篇文章中塞入太多细节,我将单独撰写关于特定主题的文章。如果你有任何建议或问题,请在下方评论。
保持更新
关于 SharpGL 开发的最新信息可以在 SharpGL CodePlex 站点或 SharpGL GitHub 站点上找到。你始终可以从 Nuget 获取最新的二进制文件,只需查看 入门指南。
我在我的博客 http://www.dwmkerr.com 上撰写关于开发 SharpGL 时遇到的各种有趣领域。