Плоскости отсечения в программе просмотра кузницы не могут обрезать объекты с помощью ShaderMaterial
Я пытаюсь добавить пользовательские объекты с THREE.ShaderMaterial
в forge-viewer я могу добавлять и отображать объекты в forge-viewer overlayScene
,
Я отослал этот блог для добавления того же самого.
Проблема, с которой я сталкиваюсь, заключается в следующем: плоскости отсечения средства просмотра кузницы не могут обрезать добавленные пользователем объекты. Если я попытаюсь добавить тот же объект с другим материалом, тогда плоскости отсечения смогут их обрезать.
Я попробовал это. Но я получаю ошибку, что Cannot resolve #include<clipping_planes_pars_vertex.glsl>
(то же самое для других источников шейдеров). Я попытался добавить эти шейдеры в THREE.ShaderChunk
но не сработало.
Я видел, что ошибка исходит от ShaderChunk.ts
потому что он не нашел шейдера в chunks[]
,
- Есть ли способ использовать плоскости отсечения с
THREE.ShaderMaterial
? - Нужно ли добавлять свои собственные шейдеры в
chunks[]
отShaderChunk.ts
? Если да, то как?
Пожалуйста, поделитесь демо-примером, если это возможно.
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
,