こんにちは、私はGLSLを初めて使っています。私はいくつか問題があります。GLSL 2.0色とテクスチャ
色やテクスチャのどちらかを使用するためにGLSLシェーダのペアを作成しようとしていますが、何か間違っている必要があります。 問題は、uUseTextureを0(色を示すはずです)に設定すると動作しない(オブジェクトが色付けされていない)ことです。私は、色分けされたコードが別々に動作することを知っています。なぜ、if文を使ってもうまくいかない理由は何ですか?ここで
はコードです:
//フラグメント
precision mediump float;
uniform int uUseTexture;
uniform sampler2D uSampler;
varying vec4 vColor;
varying vec2 vTextureCoord;
void main(void) {
if(uUseTexture == 1) {
gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
} else {
gl_FragColor = vColor;
}
}
//頂点
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
attribute vec2 aTextureCoord;
uniform int uUseTexture;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec4 vColor;
varying vec2 vTextureCoord;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
if(uUseTexture == 1) {
vTextureCoord = aTextureCoord;
} else {
vColor = aVertexColor;
}
この 'VEC2(vTextureCoord.s、vTextureCoord.t)は' 'vTextureCoord.st'であるべきです。あなたはGLSLでどのように[swizzle masks](http://www.opengl.org/wiki/GLSL_Types#Swizzling)が動作するかを調べるべきです。 –
'if(uUseTexture == 1)'を 'if(true)'に置き換えた場合、同じシェーダコードが機能することを意味しますか? – rotoglup