#javascript #three.js #shader
Вопрос:
Начнем с того, что я новичок в ShaderMaterial
и GLSL. Я прочитал руководство по GLSL и просмотрел некоторые примеры, найденные в моих поисковых запросах Google, и я пробую свои силы в этом, чтобы создать некоторые эффекты текстуры в своих проектах. Прямо сейчас я просто пытаюсь нанести текстуру на поверхность, как если бы я просто использовал MeshBasicMaterial
. Фрагменты кода выглядят примерно так:
<script type="x-shader/x-vertex" id="vertexskyshader">
varying vec2 vUv;
void main()
{
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
<script type="x-shader/x-fragment" id="fragskyshader">
varying vec2 vUv;
uniform sampler2D material;
void main()
{
gl_FragColor = texture2D(material, vUv);
}
</script>
<script type="module">
import * as THREE.........
for(f = 0; f < lvlfaces.length; f )
{
var facemat = new THREE.ShaderMaterial({ vertexColors: THREE.VertexColors, transparent: lvlfaces[f].adjmode, depthWrite: !lvlfaces[f].adjmode, depthTest: !lvlfaces[f].adjmode,
uniforms: { texture: { value: matTable[lvlfaces[f].mat] } },
vertexShader: document.getElementById("vertexskyshader").textContent,
fragmentShader: document.getElementById("fragskyshader").textContent });
Они lvlfaces
загружаются из файла и представляют собой массив объектов , содержащих информацию о поверхности (например, имя файла текстуры .mat
, используемые вершины, координаты УФ-излучения и т.д.). matTable
массив, в котором элементы названы в честь имен файлов текстур, содержит фактические данные текстуры (загруженные из THREE.TextureLoader()
). Проблема, с которой я сталкиваюсь, заключается в том, что, когда я перемещаюсь по объекту, отображаемые текстуры меняются на другую текстуру в matTable
. Не только это, но и другой объект, который использует тот же цикл, но которому назначены разные текстуры, показывает те же текстуры и изменения, что и объект, который я перемещаю.
анимация слишком большая для импорта
У меня такое чувство, что где-то здесь есть конфликт, но я понятия не имею, как это исправить.