实际上,OpenGL(或者至少PyOpenGL)中的每个函数最后都有一个f
,如glRotatef
和glColor3f
等,但是我找不到它的含义。它是否像1.0f
那样工作,默认使用单精度浮点数?'f'在OpenGL函数(如glRotatef)中意味着什么?
虽然我在这里(如果我可以问2个问题),glColor3f
和glColor3fv
之间有什么区别?
实际上,OpenGL(或者至少PyOpenGL)中的每个函数最后都有一个f
,如glRotatef
和glColor3f
等,但是我找不到它的含义。它是否像1.0f
那样工作,默认使用单精度浮点数?'f'在OpenGL函数(如glRotatef)中意味着什么?
虽然我在这里(如果我可以问2个问题),glColor3f
和glColor3fv
之间有什么区别?
该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
与GL_RGBA8I
。这不是特定于OpenGL的,各种库使用它所期望或返回的类型的前缀。
谢谢!正是我在找什么,而且这个链接页面非常有用 – polarisfox64
不客气! :) – Vallentin
@ polarisfox64:如果你想知道*为什么*所有这些都是必须的,OpenGL是一个C API,而C没有函数重载...... – peppe
你看过[glColor](https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glColor.xml)吗? – Vallentin
我没有;我不知道它可能没有后缀,所以我没有这样看。感谢指针!原来我的猜测是正确的哈哈 – polarisfox64