плоскости отсечения в просмотрщике кузницы не могут обрезать объекты с помощью ShaderMaterial - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь добавить пользовательские объекты с THREE.ShaderMaterial в forge-viewer, я могу добавлять и отображать объекты в forge-viewer overlayScene.

Я упомянул этот блог для добавления того же.

Проблема, с которой я сталкиваюсь: Обтравочные плоскости просмотрщика кузницы не могут обрезать добавленные пользователем объекты. Если я пытаюсь добавить тот же объект к другому материалу, тогда плоскости отсечения могут их обрезать.

Я пытался это . Но я получаю сообщение об ошибке Cannot resolve #include<clipping_planes_pars_vertex.glsl> (то же самое для других источников шейдеров). Я пытался добавить эти шейдеры в THREE.ShaderChunk, но не сработало.

Я видел, что ошибка возникла в ShaderChunk.ts, потому что он не нашел шейдера в chunks[].

  1. Можно ли использовать плоскости отсечения с THREE.ShaderMaterial?
  2. Нужно ли добавлять свои собственные шейдеры в chunks[] из ShaderChunk.ts? Если да, то как?

Пожалуйста, поделитесь демонстрационным примером, если это возможно.

1 Ответ

0 голосов
/ 07 сентября 2018

Как и в случае с другим вопросом о переполнении стека, инструмент раздела в 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 },
    ...
}

См. Этот gist для полного примера добавления поддержки секционирования в THREE.ShaderMaterial.

...