Return 反余弦值?
Return values for arccosine?
我实现了一个 day/night 着色器,它建立在只有面向定向光源的物体一侧的像素被照亮的基础上。我根据方向光的位置和 3D 中像素的位置之间的单位向量计算这个 space:
float3 direction = normalize(Light.Position - Object.Position);
float theta = abs(acos(dot(normalize(Object.Position), direction))) * 180 / 3.14f;
if (theta < 180)
color = float3(1.0f);
else
color = float3(0.2f);
return float4(color, 1.0f);
这很好用,但由于我最近在复习数学,这让我想到我应该确保我理解 acos
是什么 return。
从数学上讲,我知道反余弦应该给出 -1
和 1
之间的弧度角,而余弦应该给出 -1
和 1
以弧度表示的角度。
documentation 指出对于 acos
,输入值应该在 -1
和 1
之间,这遵循了这个想法,但它没有告诉我是否return 值为 0 - π
、-π - π
、0 - 2π
或类似范围。
Return Value
The arccosine of the x parameter.
Type Description
Name [Template Type] 'Component Type' Size
x [scalar, vector, or matrix] 'float' any
ret [same as input x] 'float' same dimension(s) as input x
HLSL
并没有给我一个很容易测试的方法,所以我想知道是否有人有这方面的文档。
HLSL 函数 acos
的 return 范围是多少?
我对这个主题进行了一些测试,发现 acos
return 的 HLSL 版本的值介于 0
和 π
之间。我通过以下证明了这是真的:
n = 0..3
d = [0, 90, 180, 181]
r = π / 180 * d[n]
c = cos(r)
a = acos(c)
以下是 d[n]
的评估结果:
d[0]
returns a = 0
.
d[1]
returns a = π/2
.
d[2]
returns a = π
.
d[3]
returns a ~= 3.12...
.
这告诉我们 acos
的 return 值与反余弦的 range of usual principle values 保持一致:
0 ≤ acos(x)
≤ π
也与定义保持一致:
acos(cos(θ)) = θ
我已就 HLSL 内在函数与更常见语言相比缺乏详细文档的问题向 Microsoft 提供了反馈。
我实现了一个 day/night 着色器,它建立在只有面向定向光源的物体一侧的像素被照亮的基础上。我根据方向光的位置和 3D 中像素的位置之间的单位向量计算这个 space:
float3 direction = normalize(Light.Position - Object.Position);
float theta = abs(acos(dot(normalize(Object.Position), direction))) * 180 / 3.14f;
if (theta < 180)
color = float3(1.0f);
else
color = float3(0.2f);
return float4(color, 1.0f);
这很好用,但由于我最近在复习数学,这让我想到我应该确保我理解 acos
是什么 return。
从数学上讲,我知道反余弦应该给出 -1
和 1
之间的弧度角,而余弦应该给出 -1
和 1
以弧度表示的角度。
documentation 指出对于 acos
,输入值应该在 -1
和 1
之间,这遵循了这个想法,但它没有告诉我是否return 值为 0 - π
、-π - π
、0 - 2π
或类似范围。
Return Value
The arccosine of the x parameter.
Type Description
Name [Template Type] 'Component Type' Size
x [scalar, vector, or matrix] 'float' any
ret [same as input x] 'float' same dimension(s) as input x
HLSL
并没有给我一个很容易测试的方法,所以我想知道是否有人有这方面的文档。
HLSL 函数 acos
的 return 范围是多少?
我对这个主题进行了一些测试,发现 acos
return 的 HLSL 版本的值介于 0
和 π
之间。我通过以下证明了这是真的:
n = 0..3
d = [0, 90, 180, 181]
r = π / 180 * d[n]
c = cos(r)
a = acos(c)
以下是 d[n]
的评估结果:
d[0]
returnsa = 0
.d[1]
returnsa = π/2
.d[2]
returnsa = π
.d[3]
returnsa ~= 3.12...
.
这告诉我们 acos
的 return 值与反余弦的 range of usual principle values 保持一致:
0 ≤
acos(x)
≤ π
也与定义保持一致:
acos(cos(θ)) = θ
我已就 HLSL 内在函数与更常见语言相比缺乏详细文档的问题向 Microsoft 提供了反馈。