#three.js
#three.js
Вопрос:
В Three.js
я внимательно смотрю на glsl
источник для MeshPhongMaterial. Я заметил, что фрагментный шейдер полагается на uniform
named diffuse
. Однако, похоже, нет никакого способа ее установить. Существует также uniform
named color
, который можно установить и который действительно изменяет то, что выглядит как diffuse color. Да?
Каким-то образом color
скопирована в diffuse
underground the hood? Может ли кто-нибудь разгадать эту загадку для меня.
Ответ №1:
Если вы посмотрите или выполните поиск в источнике, вы обнаружите, что она установлена на основе color
материала
Например, здесь
Комментарии:
1. Ах, хах! Подождите. Почему средство визуализации устанавливает состояние материала. За это явно должны отвечать Material и его подклассы. Нет? Приветствия.
Ответ №2:
MeshPhongMaterial
не является подклассом ShaderMaterial
, хотя они оба расширяются Material
.
Внутренне WebGLRenderer
отслеживает / знает, как справиться с двумя разными вещами:
- с любой формой.
ShaderMaterial
В любом случае Это означает, что вы можете сделать точную копию,MeshPhongMaterial
используяShaderMaterial
и вместо того, чтобыmyMaterial.color
у вас былоmyMaterial.uniforms.color
. - «Встроенные» материалы и их свойства. Для этого
WebGLRenderer
известно обо всех возможных свойствах, которые проявляют эти материалы. Gman указал, где в коде это происходит (одно из мест). Для каждого материалаWebGLRenderer
внутренне создаетсяShaderMaterial
, но вместо того, чтобы обрабатывать его форму, как это было бы с любым другим подобным материалом, он вручную отслеживает и обновляет все.
Встроенные материалы не имеют особого смысла, поскольку вы можете легко переходить foo.bar
к foo.uniforms.bar
с помощью геттеров и установщиков, оставляя средство визуализации работать только с шейдерными материалами.
Если вы действительно хотите, чтобы форма была создана для встроенного материала, вам нужно подождать, пока средство визуализации не создаст их, и вы можете подключиться к этому процессу с помощью material.onBeforeCompile = shader=>{}
( shader
объект будет содержать форму).
Комментарии:
1. Вау. Большое спасибо. Царапание головки прекратилось.
2. Мой никогда не останавливался, лол, я не вижу смысла в этом дизайне.
3. Возможно, это окажется полезным medium.com/@pailhead011 /…