Конференция "Игры" » Что такое текстурная выборка?
 
  • nuflin (04.05.08 10:43) [0]
    Что такое текстурная выборка?
  • @!!ex © (04.05.08 11:11) [1]
    Это текстурная выборка. :)
    В каком контексте?
  • XProger © (04.05.08 11:21) [2]
    Взятие значения текселя из текстуры.
  • nuflin (04.05.08 13:40) [3]
    скажите а как в вершинном шейдере получить индекс текстуры чтоб потом передать его в пиксельный шейдер
  • XProger © (04.05.08 16:15) [4]
    Индекс текстуры передаётся как uniform из программы.
  • @!!ex © (04.05.08 18:23) [5]
    > [3] nuflin   (04.05.08 13:40)

    uniform sampler2D Texture;
  • nuflin (04.05.08 19:13) [6]
    у меня сначала включается шейдер а потом все вершины рисуются списком
    ( 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 );
    }
  • @!!ex © (04.05.08 19:28) [7]
    1) Лично я разбил бы массив на блоки, по используемой текстуре. ТОгда сразу исчезает указанная проблема. Плюс не надо в память одновременно кучу текстур сувать.
    2) МОжно передавать дополнительную информацию о вершине в текстурных координатах.
  • nuflin (04.05.08 19:57) [8]
    объясни про доп.инфу о вершине в текстурных координатах
  • @!!ex © (04.05.08 20:05) [9]
    Как я понимаю, у тебя сейчас используется одна текстурная координата? к тому же только 2 значения?
    а текстурная координата - это обычный вектор. тоесть 4! значения.
    Ну и пиши в третее значение номер текстуры.
  • nuflin (04.05.08 20:27) [10]
    Т.Е чтоб в вершинном шейдере плучить этот номер надо написать
    texNum = gl_Vertex[3];
  • nuflin (04.05.08 20:35) [11]
    или texNum =fixedTexCoord[3];
    или texNum =fixedColor[3];
  • @!!ex © (04.05.08 20:57) [12]
    > texNum = gl_Vertex[3];

    это бред.
    1) насколько я помню, обращение идет по координате, а не по индексу. тоесть gl_Vertex.w в данном случае.
    2) я бы не рекомендовал хранить это значение в W. там надо хранить 1.

    gl_MultiTexCoord0.z

    плюс значение надо округлить, т.к. индес текстуры int, а координата - float.
  • nuflin (04.05.08 21:03) [13]
    спасибо вопросов больше не имею
 
Конференция "Игры" » Что такое текстурная выборка?
Есть новые Нет новых   [134430   +3][b:0][p:0.001]