2017-04-21 43 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

相關問題