нормализовать функцию рендерскрипта

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

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

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

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


person Sandra    schedule 18.11.2011    source источник


Ответы (3)


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

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

person Max    schedule 18.11.2011
comment
Как реализовать это в java? Потому что я пишу приложение для Android, используя OpenGL. - person Sandra; 21.11.2011

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

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]};
}
person Bob Keathley    schedule 04.01.2012

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

}
person Sandra    schedule 21.11.2011