爲什麼一些OpenGL參數對於glColor3f和glNormal3等函數的值在0.0到1.0之間?這是一直困擾着我的問題;自從我的3D編程生涯開始以來,我一直都有這樣的經歷,但最初我只是像牛羣一樣跟着它一起走過。但爲什麼是0.0-1.0?這是Khronos集團作出的任意選擇,還是更加存在的東西?爲什麼一些OpenGL參數需要0.0-1.0?
3
A
回答
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
自動將它們縮放到單位長度。在使用自定義着色器執行復雜照明計算的程序中,非單位長度向量可能很有用。
相關問題
- 1. 爲什麼某些OCaml函數需要()作爲參數?
- 2. 爲什麼只有一些Tkinter回調函數需要參數,而另一些則不需要
- 3. 爲什麼uploadTaskWithRequest:fromData:需要數據參數?
- 4. 爲什麼UdpClient.Receive需要ref參數?
- 5. 爲什麼需要查看參數
- 6. 爲什麼Comparator.compare需要兩個參數?
- 7. 爲什麼Python需要「self」參數?
- 8. CMBufferQueueCreate需要什麼參數?
- 9. 爲什麼'自我'需要成爲一個函數參數?
- 10. 爲什麼某些組件需要「需要UIExplorerBlock」和「需要UIExplorerPage」?
- 11. 在OpenGL中,爲什麼glVertexAttribPointer需要將「指針」參數作爲void *傳入?
- 12. 爲什麼`fgets()`需要一個* str,但是`getline()`需要一個** str參數?
- 13. 爲什麼xml_http_request需要一個操作作爲其參數?
- 14. 爲什麼我的IBAction函數需要一個參數?
- 15. 爲什麼在scala中傳遞一些函數需要_
- 16. OpenGL爲什麼需要統一變量(而不是常量)
- 17. 爲什麼實體有時需要一個「url」參數,有時不需要?
- 18. datetime.date:TypeError:需要一個整數。爲什麼?
- 19. 哪些參數需要一個Html.BeginForm()
- 20. 爲什麼我需要傳遞參數到$ uibModalInstance.close(參數)
- 21. 爲什麼ServiceStack的AppHostBase.Configure需要一個Container參數?
- 22. 爲什麼Convert.ChangeType需要一個對象參數?
- 23. 爲什麼繪製XNA()需要一個色彩參數
- 24. 爲什麼這個查詢需要一個參數?
- 25. 爲什麼git push有時需要一個localref參數?
- 26. 爲什麼np.ndarray .__ deepcopy__需要一個多餘的參數?
- 27. 爲什麼HashMap#containsKey需要一個Object類型的參數?
- 28. C# - 爲什麼我需要初始化一個[out]參數
- 29. 爲什麼pop在程序集中需要一個參數?
- 30. 爲什麼有些房產要求「強」,有些則不需要?
單位法向矢量的分量在-1至1範圍內而非0至1 – samgak