私は 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生成データを介して画像をロードしようとしましたが、同じ問題がありました。あたかもテクスチャ座標が 1 次元であるかのように..