我想有准备着色器组件(用于多采样特)WebGL的着色检查纹理状态sampler2D
在我使用(激活和绑定)仅2纹理图像我的当前状态。
,但此行:
gl_FragColor = textureColor + textureColor1 + textureColor2;
制造麻烦与我的纹理视图的纹理我从没有结合的样品textureColor2。
在着色器中无法使用console.log或任何其他标准调试方法。我有兴趣了解有关着色器的更多信息,但我被卡住了。
代码:
...
precision mediump float;
varying vec2 vTextureCoord;
varying vec3 vLightWeighting;
uniform sampler2D uSampler;
uniform sampler2D uSampler1;
uniform sampler2D uSampler2;
uniform sampler2D uSampler3;
uniform sampler2D uSampler4;
uniform sampler2D uSampler5;
uniform sampler2D uSampler6;
uniform sampler2D uSampler7;
uniform sampler2D uSampler8;
uniform sampler2D uSampler9;
uniform sampler2D uSampler10;
uniform sampler2D uSampler11;
uniform sampler2D uSampler12;
uniform sampler2D uSampler13;
void main(void) {
vec4 textureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
vec4 textureColor1 = texture2D(uSampler1, vec2(vTextureCoord.s, vTextureCoord.t));
vec4 textureColor2 = texture2D(uSampler2, vec2(vTextureCoord.s, vTextureCoord.t));
// Need help here
gl_FragColor = textureColor + textureColor1 ;
//gl_FragColor = textureColor + textureColor1 + textureColor2;
//修订问题
if ( ${numTextures} == 1)
{
gl_FragColor = textureColor;
}
else if (${numTextures} == 2)
{
gl_FragColor = textureColor + textureColor1;
}
else if (${numTextures} == 3)
{
gl_FragColor = textureColor + textureColor1 + textureColor2;
}
//我用简单实用的if else现在。
//我通过值到着色器上负载
// i的运行时仍然无法更新着色
////////////////// /////////////////////
//这是绘制函数段:
for (var t=0;t<object.textures.length;t++) {
eval(" world.GL.gl.activeTexture(world.GL.gl.TEXTURE"+t+"); ")
world.GL.gl.bindTexture(world.GL.gl.TEXTURE_2D, object.textures[t]);
world.GL.gl.pixelStorei(world.GL.gl.UNPACK_FLIP_Y_WEBGL, false);
world.GL.gl.texParameteri(world.GL.gl.TEXTURE_2D, world.GL.gl.TEXTURE_MAG_FILTER, world.GL.gl.NEAREST);
world.GL.gl.texParameteri(world.GL.gl.TEXTURE_2D, world.GL.gl.TEXTURE_MIN_FILTER, world.GL.gl.NEAREST);
world.GL.gl.texParameteri(world.GL.gl.TEXTURE_2D, world.GL.gl.TEXTURE_WRAP_S, world.GL.gl.CLAMP_TO_EDGE);
world.GL.gl.texParameteri(world.GL.gl.TEXTURE_2D, world.GL.gl.TEXTURE_WRAP_T, world.GL.gl.CLAMP_TO_EDGE);
// -- Allocate storage for the texture
//world.GL.gl.texStorage2D(world.GL.gl.TEXTURE_2D, 1, world.GL.gl.RGB8, 512, 512);
//world.GL.gl.texSubImage2D(world.GL.gl.TEXTURE_2D, 0, 0, 0, world.GL.gl.RGB, world.GL.gl.UNSIGNED_BYTE, image);
//world.GL.gl.generateMipmap(world.GL.gl.TEXTURE_2D);
world.GL.gl.uniform1i(object.shaderProgram.samplerUniform, t);
}
...
也许在运行最好的方法是用object.textures数组操作?!
最后:
- 用新标志覆盖着色器
- 编译着色器 新材料更新
你可能想要混合你的颜色,而不是总结它们。我有许多着色器示例[这里](http://blog.2pha.com/experimenting-threejs-shaders-and-shadermaterial),还有一些在我的jsfiddle [HERE](https://jsfiddle.net/user/2pha /拨弄/)。请注意,这些示例适用于旧版本的three.js,并且照明信息发送到着色器的方式已更改。 – 2pha
谢谢你,很好的例子,我会探讨这个肯定... –