'f'在OpenGL函数中意味着什么(比如glRotatef)?

时间:2017-04-21 17:28:20

标签: opengl

实际上,OpenGL中的每个函数(或至少PyOpenGL)最后都有一个f,如glRotatefglColor3f等,但我无法找到它的意思是。它是否像1.0f那样默认使用单精度浮点数?

虽然我在这里(如果我被允许提出两个问题),glColor3fglColor3fv之间有什么区别?

1 个答案:

答案 0 :(得分:4)

f告诉该函数期待float。因此,如果有i告诉函数将期待intv代表一个向量,因此glColor3fv需要一个"浮点向量"换句话说,一系列花车。

这清楚地反映在glColor的文档中。

void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void glColor3fv(const GLfloat *v);

规范中更明确地解释了格式:

  

最后的v字符(如果存在)表示该命令采用指向值的数组(向量)而不是一系列单个参数的指针。

     

通常,命令声明的格式为

rtype Name{∈1234}{∈ b s i i64 f d ub us ui ui64}{∈v}
     

rtype是函数的返回类型。大括号({})包含一系列类型描述符(参见下表),其中一个被选中。 ∈表示没有类型描述符。

     

如果没有字母,则显式给出参数'类型。如果最终字符不是v,那么N由数字1,2,3或4给出(如果没有数字,则参数的数量是固定的。)

     

如果最终字符为v,则仅显示arg1,并且它是指定类型的N值数组。

+------+----------------------------------+
| Type | Descriptor Corresponding GL Type |
+------+----------------------------------+
| b    | byte                             |
| s    | short                            |
| i    | int                              |
| i64  | int64                            |
| f    | float                            |
| d    | double                           |
| ub   | ubyte                            |
| us   | ushort                           |
| ui   | uint                             |
| ui64 | uint64                           |
+------+----------------------------------+
     

- OpenGL 4.5 Specification, Page 11 and 12

∈符号表示"是"的元素。

同样的原则用于各种事情,比如GL_RGBA32F vs GL_RGBA8I。这不是OpenGL特有的,各种库使用它预期或返回的类型的前缀。