使用英语阅读

通过


glMap2f 函数

glMap2dglMap2f 函数定义二维计算器。

语法

void WINAPI glMap2f(
         GLenum  target,
         GLfloat u1,
         GLfloat u2,
         GLint   ustride,
         GLint   uorder,
         GLfloat v1,
         GLfloat v2,
         GLint   vstride,
         GLint   vorder,
   const GLfloat *points
);

parameters

目标

计算器生成的值的种类。 接受以下符号常量。

含义
GL_MAP2_VERTEX_3
每个控制点都是三个表示 x、yz 的浮点值。 评估映射时会生成内部 glVertex3 命令。
GL_MAP2_VERTEX_4
每个控制点都是表示 x、y、zw 的四个浮点值。 评估映射时会生成内部 glVertex4 命令。
GL_MAP2_INDEX
每个控制点都是表示颜色索引的单个浮点值。 评估映射时会生成内部 glIndex 命令。 但是,当前索引不会使用这些 glIndex 命令的值更新。
GL_MAP2_COLOR_4
每个控制点都是四个表示红色、绿色、蓝色和 alpha 的浮点值。 评估映射时会生成内部 glColor4 命令。 但是,当前颜色不会使用这些 glColor4 命令的值更新。
GL_MAP2_NORMAL
每个控制点都是三个浮点值,表示法向量的 x、yz 分量。 评估映射时会生成内部 glNormal 命令。 但是,当前法线不会使用这些 glNormal 命令的值更新。
GL_MAP2_TEXTURE_COORD_1
每个控制点都是表示 纹理坐标的 单个浮点值。 评估映射时会生成内部 glTexCoord1 命令。 但是,当前纹理坐标不会使用这些 glTexCoord 命令的值更新。
GL_MAP2_TEXTURE_COORD_2
每个控制点都是两个浮点值,表示 st 纹理坐标。 评估映射时会生成内部 glTexCoord2 命令。 但是,当前纹理坐标不会使用这些 glTexCoord 命令的值更新。
GL_MAP2_TEXTURE_COORD_3
每个控制点都是三个浮点值 ,表示 s、tr 纹理坐标。 评估映射时会生成内部 glTexCoord3 命令。 但是,当前纹理坐标不会使用这些 glTexCoord 命令的值更新。
GL_MAP2_TEXTURE_COORD_4
每个控制点都是四个浮点值 ,表示 s、t、rq 纹理坐标。 评估映射时会生成内部 glTexCoord4 命令。 但是,当前纹理坐标不会使用这些 glTexCoord 命令的值更新。

u1

glEvalCoord2 呈现的 uu^的线性映射,该映射由此命令指定的公式计算的两个变量之一。

u2

glEvalCoord2 呈现的 uu^的线性映射,该映射由此命令指定的公式计算的两个变量之一。

ustride

控制点 Rij 的开头和控制点 R 的开头之间的浮点数或双精度数 (i\ +1\ ) \ j,其中 ij 分别是 uv 控制点索引。 这允许将控制点嵌入到任意数据结构中。 唯一的约束是特定控制点的值必须占用连续的内存位置。

uorder

U 轴中控制点数组的维度。 必须是正数。

v1

glEvalCoord2 呈现的 vv^的线性映射,v^是此命令指定的公式计算的两个变量之一。

v2

glEvalCoord2 呈现的 vv^的线性映射,v^是此命令指定的公式计算的两个变量之一。

vstride

控制点 Rij 的开头和控制点 R i 的开头之间的浮点数或双精度数 (j\ +1\ ) ,其中 ij 分别是 uv 控制点索引。 这允许将控制点嵌入到任意数据结构中。 唯一的约束是特定控制点的值必须占用连续的内存位置。

vorder

V 轴中控制点数组的维度。 必须是正数。

points

指向控制点数组的指针。

返回值

此函数不返回值。

错误代码

glGetError 函数可以检索以下错误代码。

名称 含义
GL_INVALID_ENUM
target 不是接受的值。
GL_INVALID_VALUE
u1 等于 u2,或 v1 等于 v2
GL_INVALID_VALUE
ustridevstride 小于控制点中的值数。
GL_INVALID_VALUE
要么是 uorder 还是 vorder 小于 1 或 GL_MAX_EVAL_ORDER。
GL_INVALID_OPERATION
函数是在 对 glBegin 的调用和对 glEnd 的相应调用之间调用的。

备注

计算器提供了一种使用多项式或有理多项式映射生成顶点、法线、纹理坐标和颜色的方法。 计算器生成的值将发送到 OpenGL 处理的进一步阶段,就像使用 glVertexglNormalglTexCoordglColor 命令呈现它们一样,只不过生成的值不会更新当前法线、纹理坐标或颜色。

任何程度的多项式或有理多项式样条 (到 OpenGL 实现) 支持的最大程度,都可以使用计算器进行描述。 其中包括计算机图形中使用的几乎所有图面,包括 B 样条图面、NURBS 图面、贝塞尔表面等。

计算器基于双变量 Bernstein 多项式定义图面。 将 p (u^,v^) 定义为

显示 p () 定义的公式。

其中 Rij 是控制点, () 是度数的 ith Bernstein 多项式

n (uorder = n + 1)

显示 n 度的伯恩斯坦多项式的等式。

和 () 是 j thBernstein 多项式,度 m (vorder = m + 1)

显示 m 度的伯恩斯坦多项式的等式。

回想一下

显示等效于 1 的公式。

glMap2 函数用于定义基础并指定生成的值类型。 定义后,可以通过调用 glEnableglDisable 和 glDisable 来启用和禁用映射,映射名称是 上述目标的 9 个预定义值之一。 当 glEvalCoord2 呈现值 uv 时,使用 u^ 和 v^ 计算双变量 Bernstein 多项式,其中

显示你^的定义的公式。

显示 v^ 定义的公式。

目标参数是一个符号常量,用于指示以为单位提供哪种类型的控制点,以及计算映射时生成的输出。

ustrideuordervstridevorderpoints 参数定义用于访问控制点的数组寻址。 points 参数是第一个控制点的位置,它占用一个、两个、三个或四个连续内存位置,具体取决于要定义的映射。 数组中有 uorder x vorder 控制点。 ustride 参数指示跳过了多少个浮点或双精度位置,以将内部内存指针从控制点 Rij 推进到控制点 R (\ i+1\ ) jvstride 参数指示跳过了多少个浮点或双精度位置,以将内部内存指针从控制点 Rij 推进到控制点 Ri (j\ +1\ )

与接受指向数据的指针的所有 OpenGL 命令一样,就像 glMap2 在返回之前复制了点的内容一样。 调用 glMap2 后,对内容的更改不起作用。

以下函数检索与 glMap2 相关的信息:

带参数GL_MAX_EVAL_ORDER的 glGet

glGetMap

带参数GL_MAP2_VERTEX_3的 glIsEnabled

带参数GL_MAP2_VERTEX_4的 glIsEnabled

带参数GL_MAP2_INDEX的 glIsEnabled

glIsEnabled with argument GL_MAP2_COLOR_4

glIsEnabled with argument GL_MAP2_NORMAL

带参数GL_MAP2_TEXTURE_COORD_1的 glIsEnabled

glIsEnabled with argument GL_MAP2_TEXTURE_COORD_2

带参数GL_MAP2_TEXTURE_COORD_3的 glIsEnabled

带参数GL_MAP2_TEXTURE_COORD_4的 glIsEnabled

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Gl.h

Opengl32.lib
DLL
Opengl32.dll

另请参阅

glBegin

glColor

glEnable

glEnd

glEvalCoord

glEvalMesh

glEvalPoint

glMap1

glMapGrid

glNormal

glTexCoord

glVertex