我一直在尝试用 SOIL 做简单的纹理映射,而且我一直有奇怪的输出..
仅在加载 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);
}
所有的制服和属性都经过验证。
尝试渲染的纹理:
(为 128x128,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 不再存在。谁能解释一下?
如果我的纹理坐标定位正确,那么我将开始查看另一个图像库..
[编辑] 我尝试通过原始 gimp 生成的数据加载图像,它有同样的问题。就好像纹理坐标是一维的..