我用 OpenGL/C++ 编写一个程序来对圆锥体进行光线追踪。对于我的强度计算,我需要知道表面法线。给定基础半径、高度和中心坐标,如何计算表面法线?
我假设您需要在给定表面上的点的情况下找到表面的法线。我进一步假设这是一个圆锥体,其底座朝下(-y 轴),圆锥体的尖端朝上(+y 轴)。如果不符合这些条件,我可以编辑我的答案以适合您的情况。
我们将曲面上的点称为 P,中心坐标为 C,半径为 r,高度为 h,法线为 N。
所有点和向量都具有三个分量(x、y、z),因此我将使用“.”来引用它们。例如 P.x 是 P 的 x 分量。
首先,我们需要一个投影到 x/z 平面上的单位向量,该向量从 C 指向 P。
V.x = P.x - C.x
V.y = 0
V.z = P.z - C.z
该向量具有正确的方向,但幅度大于一。它还不是单位向量,因此我们必须相应地缩放它。
m = sqrt(V.x^2 + V.z^2)
m 现在是 V 的大小,我们将用它来缩放 V:
V.x /= m
V.z /= m
找到法线的最终计算是:
N.x = V.x * h/r
N.y = r/h
N.z = V.z * h/r
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)