Мне был предоставлен код шейдеров (вершина и фрагмент), и моя цель - добавить некоторые функции. Но мне трудно понять некоторые функции и математику внутри. У меня есть изображение, которое я хочу проецировать текстуру этого изображения на цилиндр. Это, как я получаю пиксели от текстуры:функция для вычисления матрицы ортогональной проекции
float hFOV=0.0789; // orizontal field of view
float aspectRatio=1.5;
float ax = tan(hFOV * M_PI);
float ay = ax/aspectRatio;
vec4 q1 = myW2N(ax,ay,1.,6.) * vec4(d, 1.); // ??
vec2 p = q1.xy/q1.w;
p = 0.5 * (p + 1.0);
vec4 c = texture2D(foto, p);
Но что делает меня головную болью является myW2N()
функцией, я не могу пройти через идею внутри и что результат означает. Это просто мое мнение, что это создает матрицу проекции .. Для того, чтобы показать вам тело этой функции:
mat4 myW2N(float ax, float ay, float zNear, float zFar) {
float cx = 1.0/ax;
float cy = 1.0/ay;
float z0 = -zNear;
float z1 = -zFar;
float az = (z0 + z1)/(z0 - z1);
float bz = (1. - az) * z0;
return mat4(
cx, 0., 0., 0.,
0., cy, 0., 0.,
0., 0., az, bz,
0., 0., -1., 0.
);
}
Может кто-нибудь сказать мне, что zNeat and zFar
представляют там? Я пытался поставить там несколько значений и меняет форму wraped изображения, но что странно это как-то работает, даже если zNear
больше что zFar
..
Не могли бы вы дать мне ключ, что означает, что эта функция и что она делает в конец, пожалуйста?
«* У меня есть образ, который я хочу, чтобы обернуть вокруг цилиндра так, я говорю о ортогональной проекции. * «Хм, что? Вы пытаетесь проецировать текстуру на цилиндр? Кроме того, вы используете настольные OpenGL, OpenGL ES или WebGL? Потому что они не все одинаковые. –
Хорошо, извините. Да, я хочу проецировать текстуру на цилиндр. И я использую webGL, но я думал, что флеш-шейдеры работают одинаково везде ...? –
@NicolBolas и кстати. разве вы не представляете, что это может быть? Я имею в виду функцию, о которой идет речь. –