如何解决着色器材质在 Autodesk Forge Viewer 中不适用于 webgl 2.0
我在 Autodesk Forge Viewer 中为 ShaderMaterial
使用自定义 PointCloud
。在经历了这个 blog post 之后,我现在能够禁用 webgl2.0 并且代码似乎工作正常。但是当我尝试让它与 webGL 2.0 一起工作时,着色器停止工作。
这是关闭了 webGL 2.0 的片段着色器:
this.fragmentShader =
options.fragmentShader ||
`
uniform vec3 color;
uniform sampler2D texture;
varying vec4 vColor;
void main() {
vec4 outColor = texture2D( texture,gl_PointCoord );
if ( outColor.a < 0.5 ) discard;
if ( vColor.a < 0.5 ) discard;
gl_FragColor = outColor * vec4( color * vColor.xyz,vColor.a );
}`;
以下是使用 webGL 2.0 和 supportsMrtNormals
为 ShaderMaterial
this.fragmentShader =
options.fragmentShader ||
`
#ifdef _LMVWEBGL2_
#if defined(MRT_NORMALS)
layout(location = 1) out vec4 outNormal;
#if defined(MRT_ID_BUFFER)
layout(location = 2) out vec4 outId;
#if defined(MODEL_COLOR)
layout(location = 3) out vec4 outModelId;
#endif
#endif
#elif defined(MRT_ID_BUFFER)
layout(location = 1) out vec4 outId;
#if defined(MODEL_COLOR)
layout(location = 2) out vec4 outModelId;
#endif
#endif
#else
#define gl_FragColor gl_FragData[0]
#if defined(MRT_NORMALS)
#define outNormal gl_FragData[1]
#if defined(MRT_ID_BUFFER)
#define outId gl_FragData[2]
#if defined(MODEL_COLOR)
#define outModelId gl_FragData[3]
#endif
#endif
#elif defined(MRT_ID_BUFFER)
#define outId gl_FragData[1]
#if defined(MODEL_COLOR)
#define outModelId gl_FragData[2]
#endif
#endif
#endif
uniform vec3 color;
uniform sampler2D texture;
varying vec4 vColor;
void main() {
vec4 outColor = texture2D( texture,gl_PointCoord );
if ( outColor.a < 0.5 ) discard;
if ( vColor.a < 0.5 ) discard;
gl_FragColor = outColor * vec4( color * vColor.xyz,vColor.a );
#ifdef MRT_ID_BUFFER
outId = vec4(0.0);
#endif
#ifdef MODEL_COLOR
outModelId = vec4(0.0);
#endif
#ifdef MRT_NORMALS
outNormal = vec4(0.0);
#endif
}`;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。