2011-11-18 7 views
0

나는 안드로이드 렌더 스크립트를 배우고 현재 회전식 예를보고있다. 여기서 "normalize"라는 함수가 여러 번 사용됩니다. 예를 들면 다음과 같습니다.normalize function renderscript

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

이 기능의 의의와 의미가 무엇인지 찾을 수 없습니다. 나는 OpenGL ES 2.0을 약간 배우는 중이었고 정상화 플래그를 사용하지만 결코 사용하지 않은 함수를 사용했다. (플래그는 일반적으로 false 였기 때문에 float이 아닌 float 값을 캐스팅하는 것과 같은 일을했다.) 그래서 누군가가 나에게 좋은 설명, 나는 그것을 감사 할 것이다.

또한, 대부분의 코드를 renderscript에서 opengl es 2.0으로 이식해야하므로 마음에 자바에서이 함수를 사용해야 할 것입니다. (그리고 어쩌면 쓸까요?) Thx!

답변

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]}; 

} 
0

RenderScript에 대해 잘 모르겠지만 GLSL에서 normalize (x)는 x와 같은 방향이지만 길이가 1 인 벡터를 반환합니다 (길이는 1).

일반적으로 정규화는 값을 일부 범위로 변환하는 것을 의미합니다. 예를 들어 Time.normalize(bool)

+0

이 어떻게이 자바에 구현합니까 여기 코드인가? OpenGL을 사용하여 안드로이드 응용 프로그램을 작성 중이므로 .. – Sandra

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]}; 
} 
관련 문제