нормализовать функцию рендеринга - PullRequest
0 голосов
/ 18 ноября 2011

Я изучаю Android Renderscript и в настоящее время смотрю на пример карусели. Здесь функция под названием «нормализация» используется много раз. Например:

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

Я не могу найти, что означает и делает эта функция. Я также немного изучил OpenGl ES 2.0 и наткнулся на функции, которые используют флаг нормализации, но никогда не использовали его (флаг обычно был - ложь, поэтому он делал что-то вроде приведения не-плавающего значения к плавающему). Так что, если кто-то может дать мне хорошее объяснение, я был бы признателен.

Кроме того, мне нужно перенести большую часть кода с Renderscript на OpenGLES 2.0, так что имейте в виду, что мне придется использовать эту функцию также в Java. (и, может быть, напишите это?) Thx!

Ответы [ 3 ]

0 голосов
/ 21 ноября 2011

Мне удалось реализовать функцию нормализации для нормализации трехмерного вектора. Для нормализации вам нужно разделить каждое значение вектора (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]};

}
0 голосов
/ 04 января 2012

Небольшое исправление формулы в принятом ответе:

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]};
}
0 голосов
/ 19 ноября 2011

Я не уверен насчет RenderScript, но в GLSL normalize (x) возвращает вектор в том же направлении, что и x, но с единичной длиной (длина равна 1).

Обычно нормализация означает приведение значениябыть в некотором диапазоне.Например, в Time.normalize (bool)

...