0

我正在编写一个着色器,它需要了解点与原点之间的距离。这是我最初的行:

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;

为什么第一行可能会产生意想不到的结果?

4

1 回答 1

1

对于 pow 函数,对于 x<0 或 x=0 且 y=0 的值,结果是未定义的,更不用说它比普通平方要慢得多。

你为什么不在那里使用 length(a_Position) ?

于 2013-08-17T11:02:33.427 回答