为什么一些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. 为什么UdpClient.Receive需要ref参数?
- 4. 为什么Python需要“self”参数?
- 5. CMBufferQueueCreate需要什么参数?
- 6. 为什么'自我'需要成为一个函数参数?
- 7. 为什么某些组件需要“需要UIExplorerBlock”和“需要UIExplorerPage”?
- 8. 在OpenGL中,为什么glVertexAttribPointer需要将“指针”参数作为void *传入?
- 9. 为什么我的IBAction函数需要一个参数?
- 10. 为什么我需要传递参数到$ uibModalInstance.close(参数)
- 11. 为什么git push有时需要一个localref参数?
- 12. 为什么Convert.ChangeType需要一个对象参数?
- 13. 为什么绘制XNA()需要一个色彩参数
- 14. 为什么np.ndarray .__ deepcopy__需要一个多余的参数?
- 15. 为什么这个查询需要一个参数?
- 16. C# - 为什么我需要初始化一个[out]参数
- 17. 你需要学习OpenGL什么?
- 18. 在vs2010中需要添加什么参考才能使用OpenGL?
- 19. 为什么calloc需要两个参数,而malloc只有一个参数?
- 20. 为什么需要
- 21. 需要的类型参数是什么?
- 22. 为什么方法参数需要设置为最终?
- 23. 为什么模板声明中的size_t参数需要为const?
- 24. 为什么scrapy管道需要返回一些东西?
- 25. 为什么安装一些Python包需要Visual Studio?
- 26. 为什么一些https网站不需要ocsp查询
- 27. 为什么一些Delphi组件需要“AOwner:TComponent”来构建它们?
- 28. 为什么你需要返回一些东西到输入流?
- 29. 了解为什么构造函数需要参数?
- 30. 什么Java函数offsetByCodePoints真的需要作为参数?
单位法向矢量的分量在-1至1范围内而非0至1 – samgak