0

私はアンドロイドレンダースクリプトを学んでおり、現在カルーセルの例を見ています。ここで、「ノーマライズ」という機能が何度も使われています。例えば:

float3 eye, float3 center;
float3 f = normalize(center - eye);

この関数の意味と機能がわかりません。私も少しOpenGl ES 2.0を学んでいて、正規化フラグを使用する関数に出くわしましたが、フラグを使用したことはありません(フラグは通常-falseであったため、float以外の値をfloatにキャストするようなことを行いました)..だから誰かが与えることができれば私に良い説明、私はそれをいただければ幸いです。

また、ほとんどのコードを renderscript から opengl es 2.0 に移植する必要があるため、Java でもこの関数を使用する必要があることに注意してください。(そして多分それを書く?) Thx!

4

3 に答える 3

0

3Dベクトルを正規化するために、正規化関数を実装することができました。正規化するには、ベクトルの各値(x、y、z)をその大きさで割る必要があります。コードは次のとおりです。

private static float[] normalize(float[] _vector){
float magnitude;
magnitude = (float)(Math.sqrt(_vector[0]*_vector[0] + _vector[1]*_vector[1]  + _vector[2]*_vector[2]));
_vector[0] = _vector[0]/magnitude;
_vector[1] = _vector[1]/magnitude;
_vector[2] = _vector[2]/magnitude;

return new float[]{_vector[0], _vector[1], _vector[2]};

}
于 2011-11-21T12:27:50.880 に答える
0

受け入れられた回答の式をわずかに修正します。

private static float[] normalize(float[] _vector){
float magnitude;
magnitude = (float)(Math.sqrt(_vector[0]*_vector[0] + _vector[1]*_vector[1]  + _vector[2]*_vector[2]));
_vector[0] = _vector[0]/magnitude;
_vector[1] = _vector[1]/magnitude;
_vector[2] = _vector[2]/magnitude;

return new float[]{_vector[0], _vector[1], _vector[2]};
}
于 2012-01-04T00:34:13.653 に答える
0

RenderScript についてはよくわかりませんが、GLSL では normalize(x) は x と同じ方向のベクトルを返しますが、単位長 (長さは 1) です。

通常、正規化とは、値をある範囲にキャストすることを意味します。たとえば、Time.normalize(bool)

于 2011-11-18T20:26:47.397 に答える