給定笛卡爾座標,如何將角度從原點映射到範圍0 .. 1?將極座標映射到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);
}
對不起,我不明白你想要什麼。所有三角函數都有一個不連續性,因爲函數是週期性的。你是否反對黑色旁邊的飽和綠色? – duffymo
@duffymo是的,在問題中已澄清 – Will