SharpGL基础

本页详细介绍了 SharpGL 的最基本概念,在开始开发应用程序时必须了解这些概念。

命名约定
OpenGL 常量的命名方式与它们在 OpenGL 中的命名方式完全相同,并且是 OpenGL 类的常量成员。例如,以下常量:

//  Two OpenGL constants.
GL_TRIANGLES
GLU_TESS_COMBINE
将写成:

//  Two OpenGL constants.
OpenGL.GL_TRIANGLES
OpenGL.GLU_TESS_COMBINE
OpenGL 函数的命名方式与它们在 OpenGL 中的命名方式完全相同 - 只是删除了 'gl' 前缀。例如,以下调用:

//  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);
此规则有一个例外。参数类型后缀始终从 OpenGL 函数名称中删除。始终根据所使用的类型调用适当的函数。例如,以下调用:

//  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);
参数的数量包含在函数名称的末尾,就像在标准 OpenGL 调用中一样。这是因为在某些情况下,我们仍然需要知道这一点 - 例如,在调用 glVertex3fv 或 glVertex4fv 时,我们需要知道我们正在传递数组中的多少项。因此,如果 OpenGL 函数末尾有数字,则为了保持一致性,SharpGL 包装函数也是如此。

调用 OpenGL 函数
有两种不同的方法可以调用 OpenGL 函数。

直接 OpenGL 调用

您可以直接使用 OpenGL 对象进行 OpenGL 调用。OpenGL 中的每个函数和所有扩展函数都包含在 OpenGL 对象中。所有常量也被定义。在本例中,一段代码如下所示:

//  Set the polygon mode.
glPolygonMode(GL_FRONT, GL_FILL);
将变为:

//  Get the OpenGL object.
OpenGL gl = openGLControl.OpenGL;

//  Set the polygon mode.
gl.PolygonMode(OpenGL.GL_FRONT, OpenGL.GL_FILL);
这是进行 OpenGL 调用的最直接方法,并且使移植现有 OpenGL 代码变得非常简单。

使用包装枚举的直接 OpenGL 调用

几乎所有采用某种 uint 的 OpenGL 函数(如 glPolygonMode)都具有提供枚举作为参数的重载。例如,下面的调用:

//  Set the polygon mode.
glPolygonMode(GL_FRONT, GL_FILL);
可以写成:

//  Get the OpenGL object.
OpenGL gl = openGLControl.OpenGL;

//  Set the polygon mode.
gl.PolygonMode(PolygonFace.Front, PolygonMode.Fill);
此方法的好处是,在编写代码时,Intellisense 可以帮助您仅从可接受的参数中选择适当的参数。但是,此代码与标准 OpenGL 调用不太相似,因此可能需要更多的工作才能将现有调用移植到此样式。

渲染上下文
Render Context 是管理底层 Render Context Handle 的对象。在创建渲染上下文之前,任何 OpenGL 函数都不会起作用 - 并且不会加载任何扩展。调用 OpenGL.Create 将创建渲染上下文 - 完成此作后,可以使用扩展,但在此之前,它们将不起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值