Привет, я пытаюсь создать какой-то собственный шейдер, но я просто хочу изменить положение вершины, а не материал. В MeshLambert уже есть свет, текстура и все, что мне нужно, но я модифицирую вершины, придаю объекту органичный вид.
Кто-нибудь может указать мне направление?
Благодаря !!
Кто то?
Самым простым было бы создать собственный ShaderMaterial
который был бы похож на lambert, просто добавив свой собственный код в вершинный шейдер.
Внутри стандартные материалы используют тот же механизм, что и ShaderMaterial, поэтому вам просто нужно скопировать и вставить код отсюда:
https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLShaders.js#L1187
Привет, @alteredq, спасибо за ответ.
Это то, о чем вы говорили?
http://www.interactiveuniverse.net/Shaders.js
Я создаю объекты из массивов, предоставленных в шейдере Ламберта, и передаю их новому экземпляру ShaderMaterial.
Таким образом я просто получаю черный материал без точечного освещения.
Почти готово ;)
Чтобы функции из стандартных материалов работали в ShaderMaterial
вам также необходимо установить флаги материалов (огни, туман и т. Д.):
https://github.com/mrdoob/three.js/blob/master/src/materials/ShaderMaterial.js#L40
shaderMaterial = new THREE.ShaderMaterial( {
uniforms: uniforms,
vertexShader: vertexShader,
fragmentShader: fragmentShader,
lights: true
});
Это сработало !!! Большое вам спасибо, когда я закончу свою работу, я поделюсь с вами, ребята.
Еще один последний вопрос @alteredq, целью которого было также использование карты окружения в объекте, чтобы я мог дать ему текстуру. Как я могу реализовать такую функцию, которую содержит MeshLambertMaterial?
Хммм. Я думаю, этого должно быть достаточно, чтобы установить правильную форму ( envMap
), а также вам нужно будет придерживаться где-то в верхней части как вершинного, так и фрагментного шейдеров #define USE_ENVMAP
.
uniforms[ "envMap" ].texture = myCubeTexture;
vertexShader= [
"#define USE_ENVMAP",
"varying vec3 vLightWeighting;",
THREE.ShaderChunk[ "map_pars_vertex" ],
THREE.ShaderChunk[ "lightmap_pars_vertex" ],
...
fragmentShader = [
"#define USE_ENVMAP",
"uniform float opacity;",
...
Просто имейте в виду, что если вы измените положения вершин в шейдере, нормали, полученные из статической геометрии, больше не будут правильными, и все будет по-прежнему закрашено в соответствии со старыми позициями.
Это сработало: D
Вы, ребята, действительно потрясающие, и я знаю, что разработчикам нравится видеть, что другие люди делают с их инструментами, я надеюсь, что скоро смогу завершить свой проект (это мой личный портфель, и я использую веб-сокеты для соединения пользователей в космическом интерфейсе со сферами. (каждый - отдельный проект), и пользователи перемещаются по пространству, и каждый пользователь - это отдельный динамический точечный свет, который перемещается по моим работам.
Движок довольно функциональный, теперь мне нужно больше работать над его дизайном.
Еще раз спасибо!
@maurrubio вы закончили свой проект: eyes:
Самый полезный комментарий
@maurrubio вы закончили свой проект: eyes: