Я пытался сделать простое отображение текстуры с ПОЧВЫ, и у меня были странные выходы ..странно GLSL координаты текстуры
Вывод, отображает только когда PNG текстуры загружается. (SOIL_load_OGL_texture) Другие текстуры выглядят серыми или белыми.
вершина передается как:
struct Vertex {
float position[3];
float texturepos[2];
};
Vertex vertices[] = { // w and h are width and height of square.
0,0,0,0,0,
w,0,0,1,0,
0,h,0,0,1,
w,0,0,1,0,
w,h,0,1,1,
0,h,0,0,1
};
вершинного шейдера:
attribute vec2 texpos;
attribute vec3 position;
uniform mat4 transform;
varying vec2 pixel_texcoord;
void main(void) {
gl_Position=transform * vec4(position,1.0);
pixel_texcoord=texpos;
}
фрагмента шейдер:
varying vec2 pixel_texcoord;
uniform sampler2D texture;
void main(void) {
gl_FragColor=texture2D(texture,pixel_texcoord);
}
Все мундиры и атрибутам являются подтверждены.
Texture пытается сделать:
(128х128, мощность 2.)
Выход [с нормальными шейдерами]:
Однако, я думаю, что проблема полностью лежит в чем-то действительно причудливом, что произошло, когда я пытался его отладить.
Я изменил фрагмент шейдер:
varying vec2 pixel_texcoord;
uniform sampler2D texture;
void main(void) {
gl_FragColor=vec4(pixel_texcoord.x,0,pixel_texcoord.y,1);
}
И получил этот результат: Что-то очень неправильно с текстурными координатами, в соответствии с шейдером, Y теперь X и X более не существует. Может ли кто-нибудь объяснить это?
Если мои координаты текстуры находятся в правильном положении, то я начну смотреть на другую библиотеку изображений ..
[EDIT] Я попытался загрузки изображения с помощью сырых каркасная сгенерированных данных, и это была та же проблема. Это как если бы текстурные координаты были одномерными.
Вы должны добавить, как вы настраиваете потоки вершин. Идет вызов glvertexattribpointer и т. Д. – starmole
Из изображения текстурных координат в вашем отладочном шейдере становится ясно, что он вообще не может иметь ничего общего с изображением текстуры. Я второй * starmole *, который в случае, показывающем фактическую настройку формата вершин (и рисование), имеет решающее значение для решения проблемы. –
Где ваши директивы '# version'? – genpfault