2017-04-21 211 views
0

实际上,OpenGL(或者至少PyOpenGL)中的每个函数最后都有一个f,如glRotatefglColor3f等,但是我找不到它的含义。它是否像1.0f那样工作,默认使用单精度浮点数?'f'在OpenGL函数(如glRotatef)中意味着什么?

虽然我在这里(如果我可以问2个问题),glColor3fglColor3fv之间有什么区别?

+0

你看过[glColor](https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glColor.xml)吗? – Vallentin

+0

我没有;我不知道它可能没有后缀,所以我没有这样看。感谢指针!原来我的猜测是正确的哈哈 – polarisfox64

回答

2

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_RGBA32FGL_RGBA8I。这不是特定于OpenGL的,各种库使用它所期望或返回的类型的前缀。

+0

谢谢!正是我在找什么,而且这个链接页面非常有用 – polarisfox64

+0

不客气! :) – Vallentin

+0

@ polarisfox64:如果你想知道*为什么*所有这些都是必须的,OpenGL是一个C API,而C没有函数重载...... – peppe