2014-11-05 2 views
0

Я использую текстуры Altas и этот вершинный шейдер, чтобы сделать текстуру на четырехугольник:OpenGLES компенсирующие текстурные координаты в шейдере

"uniform mat4 uMVPMatrix;" + 
    "attribute vec4 vPosition;" + 
    "attribute vec4 a_Color;" + 
    "attribute vec2 a_texCoord;" + 
    "varying vec4 v_Color;" + 
    "varying vec2 v_texCoord;" + 
    "uniform vec4 u_newColor;" + 

    "void main() {" + 
    " float offset = 0.33;" + 
    " gl_Position = uMVPMatrix * vPosition;" + 
    " v_texCoord.x = a_texCoord.x + offset;" + 
    " v_texCoord.y = a_texCoord.y + offset;" + 
    " v_Color = u_newColor;" + 
    "}"; 

Все работает отлично и я вынести на треть к текстура, показывающая среднюю плитку 9 в атласе. Кроме того, я хочу, чтобы «смещение» было переменной, т. Е. Я хочу изменить его в зависимости от того, какой «плитки» мне нужен в атласе текстуры.

Как это возможно?

ответ

0

добавить форму и использовать это:

"uniform mat4 uMVPMatrix;" + 
"attribute vec4 vPosition;" + 
"attribute vec4 a_Color;" + 
"attribute vec2 a_texCoord;" + 
"varying vec4 v_Color;" + 
"varying vec2 v_texCoord;" + 
"uniform vec4 u_newColor;" + 
"uniform vec2 u_offset ;" + //vec2 so there is a x and y component that you can set 

"void main() {" + 
" gl_Position = uMVPMatrix * vPosition;" + 
" v_texCoord = a_texCoord + u_offset;" + 
" v_Color = u_newColor;" + 
"}"; 

и установить форму с

glUniform2f(u_offset_location, xTile, yTile); 
+0

Спасибо за быстрый ответ. Это именно то, что я пытался, однако текстура больше не видна, независимо от значений, которые я задал. Я где-то читал, что «смещение» должно быть постоянным? – user3725725

+0

смещение должно быть между 0 и 1, чтобы получить результат, который вы изначально пытались «0,33, 0,33» для значений «xTile» и «yTile» –

Смежные вопросы