-
Что такое текстурная выборка?
-
Это текстурная выборка. :)
В каком контексте?
-
Взятие значения текселя из текстуры.
-
скажите а как в вершинном шейдере получить индекс текстуры чтоб потом передать его в пиксельный шейдер
-
Индекс текстуры передаётся как uniform из программы.
-
> [3] nuflin (04.05.08 13:40)
uniform sampler2D Texture;
-
у меня сначала включается шейдер а потом все вершины рисуются списком
( glDrawArrays), т.е. в шейдер идёт несколько текстур и он должен какую текстуру куда ноложить
procedure draw;
// Очистка экрана и матриц
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glUseProgramObjectARB(Shaders[0]); // включаем шейдер Shaders[0]
// отправляем шейдеру индексы текстур
for i:= 0 to 3 do glUniform1iARB(shader_myTexture[i],i);
// делаем glBindTexture для отправленных текстур
for i:= 0 to 3 do begin
glActiveTexture(GL_TEXTURE0+i);
glBindTexture(GL_TEXTURE_2D, i+1);
end;
VBO();/////////вбо
end;
//////////////////////////////////////////////////////////////////////////////////////
вершинны шейдер
varying float texNum;
texNum = ????? номер текстуры вершины как определить не знаю
фрагментарный шейдер
uniform sampler2D myTexture0;
uniform sampler2D myTexture1;
uniform sampler2D myTexture2;
void main(void)
{
if (texNum==0.0)
gl_FragColor = texture2D( myTexture0, gl_TexCoord[0].st );
else if (texNum==1.0)
gl_FragColor = texture2D( myTexture1, gl_TexCoord[0].st );
else if (texNum2==2.0)
gl_FragColor = texture2D( myTexture2, gl_TexCoord[0].st );
}
-
1) Лично я разбил бы массив на блоки, по используемой текстуре. ТОгда сразу исчезает указанная проблема. Плюс не надо в память одновременно кучу текстур сувать.
2) МОжно передавать дополнительную информацию о вершине в текстурных координатах.
-
объясни про доп.инфу о вершине в текстурных координатах
-
Как я понимаю, у тебя сейчас используется одна текстурная координата? к тому же только 2 значения?
а текстурная координата - это обычный вектор. тоесть 4! значения.
Ну и пиши в третее значение номер текстуры.
-
Т.Е чтоб в вершинном шейдере плучить этот номер надо написать
texNum = gl_Vertex[3];
-
или texNum =fixedTexCoord[3];
или texNum =fixedColor[3];
-
> texNum = gl_Vertex[3];
это бред.
1) насколько я помню, обращение идет по координате, а не по индексу. тоесть gl_Vertex.w в данном случае.
2) я бы не рекомендовал хранить это значение в W. там надо хранить 1.
gl_MultiTexCoord0.z
плюс значение надо округлить, т.к. индес текстуры int, а координата - float.
-
спасибо вопросов больше не имею