Учитывая декартовую позицию, как вы можете сопоставить угол от начала координат до диапазона 0 .. 1?картирование полярного угла до 0..1
Я попытался:
sweep = atan(pos.y,pos.x) + PI)/(2.*PI);
(где развертка должна находиться в диапазоне от 0 до 1)
Это GLSL, поэтому функция atan
счастлива с двумя параметрами (у, то х) и возврат - PI ... PI
Это дает 1 в верхнем левом квадранте, приятный градиент в верхнем правом углу объезжая в правый нижний квадрант, а затем 0 в левом нижнем квадранте:
Как мне получить красивую единую градиентную развертку? Я хочу, чтобы максимальная развертка где-то была, а минимум, прилегающий к ней против часовой стрелки.
Вот мой GLSL код шейдера:
Vertex шейдеров:
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