Forge 查看器中的裁剪平面无法使用 ShaderMaterial 裁剪对象
clipping planes in forge viewer not able to clip objects with ShaderMaterial
我正在尝试在 forge-viewer 中使用 THREE.ShaderMaterial
添加自定义对象,我能够在 forge-viewer 的 overlayScene
中添加和渲染对象。
我参考了 this 博客以添加相同内容。
我面临的问题是:
forge-viewer 的裁剪平面无法裁剪自定义添加的对象。
如果我尝试添加与其他对象相同的对象 material,则剪裁平面能够剪裁它们。
我试过了。但是我收到 Cannot resolve #include<clipping_planes_pars_vertex.glsl>
错误(其他着色器源也一样)。我尝试在 THREE.ShaderChunk
中添加这些着色器,但没有成功。
我看到错误来自 ShaderChunk.ts
,因为它没有在 chunks[]
中找到着色器。
- 有什么方法可以使用
THREE.ShaderMaterial
的裁剪平面吗?
- 我是否需要在
ShaderChunk.ts
的 chunks[]
中添加我的自定义着色器?如果是如何?
如果可能,请分享一个演示示例。
与您发现的另一个 Stack Overflow 问题类似,Forge Viewer 中的部分工具使用自定义着色器逻辑,该逻辑仅包含在 Viewer 自己的 material 中。尝试在 material 着色器中包含以下代码片段:
在顶点着色器中:
...
#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 },
...
}
查看此 gist 以获取向 THREE.ShaderMaterial
添加分段支持的完整示例。
我正在尝试在 forge-viewer 中使用 THREE.ShaderMaterial
添加自定义对象,我能够在 forge-viewer 的 overlayScene
中添加和渲染对象。
我参考了 this 博客以添加相同内容。
我面临的问题是: forge-viewer 的裁剪平面无法裁剪自定义添加的对象。 如果我尝试添加与其他对象相同的对象 material,则剪裁平面能够剪裁它们。
我试过了Cannot resolve #include<clipping_planes_pars_vertex.glsl>
错误(其他着色器源也一样)。我尝试在 THREE.ShaderChunk
中添加这些着色器,但没有成功。
我看到错误来自 ShaderChunk.ts
,因为它没有在 chunks[]
中找到着色器。
- 有什么方法可以使用
THREE.ShaderMaterial
的裁剪平面吗? - 我是否需要在
ShaderChunk.ts
的chunks[]
中添加我的自定义着色器?如果是如何?
如果可能,请分享一个演示示例。
与您发现的另一个 Stack Overflow 问题类似,Forge Viewer 中的部分工具使用自定义着色器逻辑,该逻辑仅包含在 Viewer 自己的 material 中。尝试在 material 着色器中包含以下代码片段:
在顶点着色器中:
...
#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 },
...
}
查看此 gist 以获取向 THREE.ShaderMaterial
添加分段支持的完整示例。