2015-05-09 68 views
3

爲什麼一些OpenGL參數對於glColor3f和glNormal3等函數的值在0.0到1.0之間?這是一直困擾着我的問題;自從我的3D編程生涯開始以來,我一直都有這樣的經歷,但最初我只是像牛羣一樣跟着它一起走過。但爲什麼是0.0-1.0?這是Khronos集團作出的任意選擇,還是更加存在的東西?爲什麼一些OpenGL參數需要0.0-1.0?

+0

單位法向矢量的分量在-1至1範圍內而非0至1 – samgak

回答

3

因爲小於0或大於1的值對這些事情沒有意義。

對於顏色,用於顯示目的的典型表示是從0到255的8位整數,但OpenGL不限於該特定表示; GL實現還可以支持48位顏色(每通道16位)或浮點顏色組件等內容。爲了與底層表示無關,OpenGL中的顏色成分表示爲0%到100%的分數,用數字0.0和1.0表示。 GL實現將這些值轉換爲顯示器實際使用的任何格式(例如典型的0-255)。

法線應該是單位長度的向量,這意味着每個分量的長度自然不會大於1;否則整個向量的長度將大於1

請注意,這些值不實際上必須在0.0-1.0範圍:

  • 對於顏色,顯示器可以」 t實際上顯示亮度大於100%,但是如果顏色分量大於1.0,則它將乘以某種東西(例如紋理或比例因子),使其回到範圍內。這通常用於HDR呈現。
  • 非單位長度的法線向量對於您聽起來像您正在使用的傳統固定功能光源並不是很有用,因爲它們不符合現實世界的物理學,但您仍可以指定它們你會得到數學上正確的結果(雖然不現實或有用)。您還可以指定非單位長度的法線,並要求OpenGL使用GL_NORMALIZE自動將它們縮放到單位長度。

    在使用自定義着色器執行復雜照明計算的程序中,非單位長度向量可能很有用。

相關問題