3Dポイント(x、y、z)と3つの(x、y、z)ポイントで定義されるファセットを持っています。私はファセットとポイントの間の角度を計算しようとしています。これは、光が3D空間内を移動しているかのように、ファセットを適切にシェードすることができるようにするためです。ポイントと3Dファセットの間の角度を計算します
うまくいけば、このイメージは、私がうまくいきたいと思っているアイデアを与えてくれるでしょう。 3つのドットは、ファセットに対して空間内の点であり、その向きに関連して異なる角度を有する。私が見つけたいのはこの角度です。ドットが光の点であれば、黒のドットは最も明るい光を提供し、青は約50%の明るさになり、緑は非常に暗くなる。
私は任意の2点の大きさ、長さ、内積を計算することができますが、ファセット自体と点の間の角度を計算する方法は失われています。
私は、ポイントがファセット上であるかレベルであるか、つまりファセットに対するポイントの角度を計算する方法を知りたいと思います。
私がこれまで持っているコードは次のとおりです。
-- Get length of 2D or 3D vector
local function vector2d3dLength(vector)
return math.sqrt(vector.x*vector.x + vector.y*vector.y + (vector.z or 0)*(vector.z or 0))
end
-- Normalise 2D or 3D vector
local function normalise2d3dVector(vector)
local len = vector2d3dLength(vector)
if (len == 0) then
return vector
end
local normalised = { x=vector.x/len, y=vector.y/len }
if (vector.z) then
normalised.z = vector.z/len
end
return normalised
end
local function crossProduct3d(a, b)
return { x=a.y*b.z − a.z*b.y, y=a.z*b.x − a.x*b.z, z=a.x*b.y − a.y*b.x }
end
local function dotProduct3d(a, b)
return a.x*b.x + a.y*b.y + a.z*b.z
end
-- subtract vector b from vector a
local function subtract_vectors(a, b)
local sub = { x=a.x-b.x, y=a.y-b.y }
if (a.z ~= nil and b.z ~= nil) then
sub.z = a.z-b.z
end
return sub
end
はどのようにして顔に_point_の角度を定義していますか?あなたは方向ベクトルを意味しますか? –
(X、y、z)値による。私はおそらく方向ベクトルを意味しますが、私は違いがわからない、私は恐れています。 –
入力データが不十分です。明るさを測定しているファセット上の点を指定する必要があります。したがって、プログラム入力は、ファセットを指定する3つのポイント、ファセットの1つのポイント(角度の頂点)、および1つの外部ポイント(光源のロケーション)で構成する必要があります。 @willywonkadailyblah - おそらく、OPはファセットの法線と光源の方向との間の角度を計算したいと考えています。 –