2012-03-18 4 views
1

У меня получилось 256 * 256 текстур, и все в порядке, но часть, в которой я пытаюсь отобразить всю текстуру на весь квадрат, разрушена.
Мой квадрат, текстурированный только на 1/5 слева направо, остается черным, что означает отсутствие текстурирования там.
Текстурирующая часть в целом работает так же, как и shoud.
glFrontFace нетронутым (по умолчанию)
текстура создана с:
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);Текстурирование квадранта (треугольная полоса) OpenGL ES 2.0

GLfloat quad_pos[] = 
{ 
0.5, 0.5, 0.0, 
-0.5, 0.5, 0.0, 
0.5,-0.5, 0.0, 
-0.5,-0.5, 0.0 
}; 

//Maybe i need 5 and 6 verticles tex coords? 
GLfloat quad_tex[]= 
{ 
0.0, 1.0, 
0.0, 0.0, 
1.0, 1.0, 
1.0, 0.0 
}; 

GLfloat quad_col[]= 
{ 
0.0, 1.0, 1.0, 1.0, 
1.0, 0.0, 1.0, 1.0, 
1.0, 1.0, 0.0, 1.0, 
0.0, 0.0, 1.0, 1.0 
}; 

//In draw_quad method() 
//Binding texture and setting uniforms/attributes skipped 

glDrawArrays (GL_TRIANGLE_STRIP, 0, 4);

вершинного шейдера

attribute vec4 av_col; 
attribute vec4 av_pos; 
attribute vec2 av_tex; 
varying vec4 vv_col; 
varying vec2 vv_tex; 
uniform mat4 um_mvp; 
void main() 
{ 
vv_col = av_col; 
vv_tex = av_tex; 
gl_Position = um_mvp * av_pos; 
} 

Фрагмент шейдер

precision lowp float; 
uniform sampler2D us_tex; 
varying vec4 vv_col; 
varying vec2 vv_tex; 
void main() 
{ 
gl_FragColor = (vv_col * texture2D(us_tex, vv_tex)); 
} 

, если изменение текс Coords к

GLfloat quad_tex[]= 
{ 
0.0, 0.2, 
0.0, 0.0, 
0.2, 0.2, 
0.2, 0.0 
}; 

Quad будет полностью текстурированных и цветной, но текстура будет overscaled (Minecraft пиксель стиль).

ответ

1

Quad будет полностью текстурированным и цветным, но текстура будет overscaled (Minecraft стиль пикселя)

Это звучит, как если бы вы включили по умолчанию GL_NEAREST фильтрации. Попробуйте использовать вместо GL_LINEAR:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml