3

私はvoxeljsで遊んでいますが、3Dプログラミングは初めてですが、このコードは「球体世界」を生成するとドキュメントに記載されています。

generate: function(x,y,z) {
   return x*x+y*y+z*z <= 20*20 ? 1 : 0 // sphere world
},

これは実際にどのように球を生成していますか?私の単純な理解から、それは基本的に3Dの世界の各「チャンク」を「ループ」していると思いますか?これについてのさらなる説明や良いチュートリアルへのポイントは大きな助けになるでしょう!

4

2 に答える 2

5

あなたの関数は言う:

のボクセル(x, y, z)が球の一部である場合は、を返します。それ以外の場合は、を返し1ます0

著者は球方程式を適用します。球は、次のボクセルのセットによって形成されます。

ここに画像の説明を入力してください

これは基本的に、中心までの距離が(0, 0, 0)半径よりも小さい場合、ボクセルが球の一部であることを意味します。距離は、ピタゴラス定理を使用して計算されます。(あなたの場合20)半径を二乗することにより、平方根を計算せずにそれを二乗距離と比較することができます。

于 2013-01-24T00:09:48.267 に答える
4

これは、中心点から特定の距離内にあるすべての点として球を定義できるため、3次元空間の距離式に基づいています。

任意の2つのオブジェクト間の距離は、(x1-x2)^ 2 +(y1-y2)^ 2 +(z1-z2)^2の平方根に等しくなります。

上記の関数は、各ボクセルが原点から20単位以内にある場合にフラグを立てます。原点は(0、0、0)であるため、距離関数はx1 ^ 2 + y1 ^ 2 + z1^2の平方根まで単純化されます。これはまた、平方根を取り除き、結果を20 ^ 2と比較することにより、別の最適化をスローします。

于 2013-01-24T00:09:38.987 に答える