我正在尝试在THREE.ShaderMaterial
中添加自定义对象,并能够在overlayScene
中添加并呈现这些对象。
我推荐this博客是为了添加该博客。
我面临的问题是: 伪造查看器的剪切平面无法剪切自定义添加的对象。 如果我尝试与其他材质添加同一对象,则剪切平面可以对其进行剪切。
我尝试了this。但是我收到Cannot resolve #include<clipping_planes_pars_vertex.glsl>
(与其他着色器源相同)的错误。我试图在THREE.ShaderChunk
中添加这些着色器,但没有用。
我已经看到错误来自ShaderChunk.ts
,因为它没有在chunks[]
中找到着色器。
THREE.ShaderMaterial
使用剪切平面?chunks[]
的{{1}}中添加自定义着色器吗?如果是,怎么办?请尽可能分享一个演示示例。
答案 0 :(得分:1)
与您发现的其他“堆栈溢出”问题类似,Forge Viewer中的剖面工具使用了自定义着色器逻辑,该逻辑仅包含在Viewer自己的材质中。尝试在材质着色器中包含以下片段:
在顶点着色器中:
...
#if NUM_CUTPLANES > 0
varying vec3 vWorldPosition;
#endif
...
void main() {
...
#if NUM_CUTPLANES > 0
vWorldPosition = vec3(/* include your own vertex world position here */);
#endif
...
}
...
在片段着色器中:
...
#if NUM_CUTPLANES > 0
varying highp vec3 vWorldPosition;
#endif
#include<cutplanes>
...
void main() {
...
#if NUM_CUTPLANES > 0
checkCutPlanes(vWorldPosition);
#endif
...
}
...
在定义新的THREE.ShaderMaterial
时,您还需要包括几个特定于部门的制服:
const uniforms = {
...
"cutplanes": { type: "v4v", value: [] },
"hatchParams": { type: "v2", value: new THREE.Vector2(1.0, 10.0) },
"hatchTintColor": { type: "c", value: new THREE.Color( 0xFFFFFF ) },
"hatchTintIntensity": { type: "f", value: 1.0 },
...
}
有关向THREE.ShaderMaterial
添加分区支持的完整示例,请参见此gist。