Хотите знать, как написать GLSL-функции , которые могут принимать различные типы аргументов.
Насколько я понимаю, в GLSL a * b
можно вызвать для vec2 * vec2
, vec2 * vec3
,..., vec2 * mat3
и т. Д. Для десятков возможных комбинаций.Мне интересно, как написать это как функцию, чтобы лучше понять язык.
Интересно, нужно ли вам на самом деле записывать каждую комбинацию:
vec2
multiply(vec2 a, vec2 b) {
return a * b
}
vec3
multiply(vec3 a, vec3 b) {
return a * b
}
....
Или еслиВы можете написать одну функцию, которая обрабатывает их все:
vec or mat
multiply(a, b) {
return a * b
}
Не уверен, как это работает.Возможно, им всем нужны разные имена:
vec2
multiplyv2(vec2 a, vec2 b) {
return a * b
}
vec3
multiplyv3(vec3 a, vec3 b) {
return a * b
}
....
Обновление:
Первая часть решена :
vec2 rotate(vec2 v, float angle) {
return rotation2d(angle) * v;
}
vec3 rotate(vec3 v, vec3 axis, float angle) {
return (rotation3d(axis, angle) * vec4(v, 1.0)).xyz;
}
Вы можете перегрузить функции.