これは意味があるかもしれませんが、テクスチャを持っているかどうかにかかわらず、別のシェーダが必要です。これを回避するには、テクスチャを必要としないときに、単一のピクセルの白いテクスチャを使用します。そうすれば、両方のケースをカバーするのに1つのシェーダが必要になります。シェーダは今、あなたのコードでは、あなたがこの
// at init time.
var whiteColor = new Float32Array([1, 1, 1, 1]);
// at draw time
gl.uniform4fv(u_colorLocation, whiteColor); // use white color
gl.bindTexture(gl.TEXTURE_2D, someTexture); // and some texture
... draw ...
のようなテクスチャー描くことができますそして、あなたはそれもこの
// at init time.
var whiteTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, whiteTexture);
var whitePixel = new Uint8Array([255, 255, 255, 255]);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0,
gl.RGBA, gl.UNSIGNED_BYTE, whitePixel);
// at draw time
gl.uniform4fv(u_colorLocation, someColor); // use the color I want
gl.bindTexture(gl.TEXTURE_2D, whiteTexture); // use the white texture
... draw ...
を行う非テクスチャ描画するこの
uniform vec4 u_color;
uniform sampler2D u_texture;
varying vec2 v_texCoord;
void main(void) {
gl_FragColor = texture2D(u_texture, v_texCoord) * u_color;
}
のようになります。非白色の色とテクスチャを一緒に使用してテクスチャを色づけることができます。
JavaScriptコードも投稿してください。あなたはテクスチャとそれ以外をどのように初期化しますか? – datenwolf
[lession4](http://learningwebgl.com/blog/?p=370)のオブジェクトにテクスチャキューブ(lession5から)を追加しようとしましたが、 –