ForEach.shader = function(gltf, handler)
{
if (hasExtension(gltf, 'KHR_techniques_webgl'))
{
if( gltf.extensions.KHR_techniques_webgl.shaders.length == 2 )
{
var numberi = gltf.extensions.KHR_techniques_webgl.shaders[1].extras._pipeline.source.lastIndexOf("gl_FragColor");
var sky1 = gltf.extensions.KHR_techniques_webgl.shaders[1].extras._pipeline.source.substring(0, numberi);
var sky2 = 'color = vec3(1.0, 0.0, 0.0);\n';
var sky3 = gltf.extensions.KHR_techniques_webgl.shaders[1].extras._pipeline.source.substring( numberi);
gltf.extensions.KHR_techniques_webgl.shaders[1].extras._pipeline.source = sky1 + sky2 + sky3;
}
else if( gltf.extensions.KHR_techniques_webgl.shaders.length > 2 )
{
var numberi = gltf.extensions.KHR_techniques_webgl.shaders[3].extras._pipeline.source.lastIndexOf("gl_FragColor");
var sky1 = gltf.extensions.KHR_techniques_webgl.shaders[3].extras._pipeline.source.substring(0, numberi);
var sky2 = 'color = vec3(1.0, 0.0, 0.0);\n';
var sky3 = gltf.extensions.KHR_techniques_webgl.shaders[3].extras._pipeline.source.substring( numberi);
gltf.extensions.KHR_techniques_webgl.shaders[3].extras._pipeline.source = sky1 + sky2 + sky3;
}
return ForEach.object(gltf.extensions.KHR_techniques_webgl.shaders, handler);
}
return ForEach.topLevel(gltf, 'shaders', handler);
};

本文介绍了一种针对GLTF模型中的shader进行修改的技术,通过定位到gl_FragColor并插入特定代码,使输出颜色变为红色。此方法适用于处理包含KHR_techniques_webgl扩展的GLTF文件,当shaders数量为2或大于2时,分别对第2个或第4个shader进行操作。
374

被折叠的 条评论
为什么被折叠?



