给定一个笛卡尔位置,如何将角度从原点映射到范围 0 .. 1?
我试过了:
sweep = atan(pos.y,pos.x) + PI) / (2.*PI);
(扫描应介于 0 和 1 之间)
这是 GLSL,因此该atan
函数对两个参数(y 然后 x)感到满意并返回 -PI ... PI
这在左上象限中给出了 1,在右上象限中给出了一个很好的渐变到右下象限,然后在左下象限中为 0:
我如何获得一个不错的单梯度扫描呢?我想要某处的最大扫掠,以及逆时针与之相邻的最小扫掠。
这是我的 GLSL 着色器代码:
顶点着色器:
uniform mat4 MVP_MATRIX;
attribute vec2 VERTEX;
varying vec2 pos;
void main() {
gl_Position = MVP_MATRIX * vec4(VERTEX,-2,1.);
pos = gl_Position.xy;
}
片段着色器:
uniform vec4 COLOUR;
varying vec2 pos;
void main() {
float PI = 3.14159265358979323846264;
float sweep = (atan(pos.y,pos.x) + PI) / (2.*PI);
gl_FragColor = vec4(COLOUR.rgb * sweep,COLOUR.a);
}