gpt4 book ai didi

opengl - 为什么 GL_SHININESS 的最大值是 128.0 而不是 1.0

转载 作者:行者123 更新时间:2023-12-01 15:07:06 25 4
gpt4 key购买 nike

我今天想到的一件事是 OpenGL 将 GL_SHININESS Material 组件指定为介于 0.0 和 128.0 之间,而不是介于 0.0 和 1.0 之间。
据我所知,您可以使用浮点值指定的所有其他内容的范围都在 0.0 到 1.0 之间。与 GL_SHININESS 不同的原因是什么?
编辑:
另请参阅我在下面发布的新答案中的注释。
由于构建照明模型的方式,0.0 到 1.0 的范围没有任何意义。发光系数用作指数。在 [0.0, 1.0] 范围内为 y 增加 x^y 在照明模型中没有多大意义,因为对于范围 [-1.0, +1.0] 内的 x(这是因为它来自 a三角余弦函数)你不能更严格地约束三角分布,你只能不那么严格地约束它。
比我在这里所做的更好地解释这一点的引用资料包括:

  • 交互式计算机图形 - Angel 和 Schreiner 基于着色器的 OpenGL 自上而下的方法
  • OpenGL 编程指南,版本 4.3

  • 下面的答案也非常有用。
    我想当我几年前问这个问题时,我可能随后问“为什么值不在 0.0 到 1.0 范围内,然后将该值映射到指数的新值?”这是另一个好问题,大概这将是一个指数映射:y = exp(kx), x in [0.0, 1.0]。答案是“因为它不是那样设计的”。虽然从“黑匣子”的角度来看这可能更有用,但对于以某种形式的实验测量指数以希望实现逼真的 Material 模型的科学家来说,这并不是很有用。

    最佳答案

    在大多数简单的光照模型中,镜面高光的亮度计算为 cos(theta) ^ n哪里theta是入射角和 n是光泽值。
    GL_SHININESS是那个指数。值越高,高光将越“紧密”。

    恕我直言,对于知道公式的人来说,使用给定的值更直观,而不是尝试使用 0..1 范围内的“标准化”值

    关于opengl - 为什么 GL_SHININESS 的最大值是 128.0 而不是 1.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17725670/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com