實際上,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