2013-08-17 4 views
0

Я пишу шейдер, который требует знания расстояния между точкой и началом. Это линия у меня был изначально:Почему эта линия GLSL для вычисления расстояния дает непоследовательные результаты, когда эта работа работает так, как ожидалось?

float distanceToOrigin = sqrt((pow(a_Position.x,2.0)+pow(a_Position.y,2.0)+pow(a_Position.z,2.0)); 

Но делать это заставило вершину к исчезнет в некоторых районах сцены.

Замена этой линии на это для расчета Манхэттена вместо евклидова расстояния дает результаты, которые я ожидал бы на расстоянии Манхэттена.

float distanceToOrigin = a_position.x + a_position.y + a_position.z; 

Почему первая строка производит неожиданные результаты?

ответ

1

Для функции pow результаты не определены для значений x < 0 или если x = 0 и y = 0, не говоря уже о том, что это намного медленнее, чем простое квадратирование.

Почему вы не используете длину (a_Position) там?