实际上,OpenGL中的每个函数(或至少PyOpenGL)最后都有一个f
,如glRotatef
和glColor3f
等,但我无法找到它的意思是。它是否像1.0f
那样默认使用单精度浮点数?
虽然我在这里(如果我被允许提出两个问题),glColor3f
和glColor3fv
之间有什么区别?
答案 0 :(得分:4)
f
告诉该函数期待float
。因此,如果有i
告诉函数将期待int
。 v
代表一个向量,因此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 | +------+----------------------------------+
∈符号表示"是"的元素。
同样的原则用于各种事情,比如GL_RGBA32F
vs GL_RGBA8I
。这不是OpenGL特有的,各种库使用它预期或返回的类型的前缀。