В трех js я использую вершинный шейдер для анимации большой геометрии.Три js Shader Материал модифицирует буфер глубины
Я также создал эффект глубины резкости на выходе. Проблема в том, что эффект глубины резкости, похоже, не знает об изменении позиционирования, созданного в моем вершинном шейдере. Он реагирует так, как будто геометрия находится в исходном положении.
Как обновить информацию о глубине в моем шейдере/материале, чтобы функция DOF работала правильно? THREE.Material имеет depthWrite свойство, но это не кажется, что ...
Моя глубина резкости прохода работает так:
renderer.render(this.originalScene, this.originalCamera, this.rtTextureColor, true);
this.originalScene.overrideMaterial = this.material_depth;
renderer.render(this.originalScene, this.originalCamera, this.rtTextureDepth, true);
rtTextureColor и rtTextureDepth оба WebGLRenderTargets. По какой-то причине rtTextureColor правильно, но rtTextureDepth не
вот моя вершинный шейдер:
int sphereIndex = int(floor(position.x/10.));
float displacementVal = displacement[sphereIndex].w;
vec3 rotationDisplacement = displacement[sphereIndex].xyz;
vNormal = normalize(normalMatrix * normal);
vec3 vNormel = normalize(normalMatrix * viewVector);
intensity = abs(pow(c - dot(vNormal, vNormel), p));
float xVal = (displacementVal*orbitMultiplier) * sin(timeValue*rotationDisplacement.x);
float yVal = (displacementVal*orbitMultiplier) * cos(timeValue*rotationDisplacement.y);
float zVal = 0;
vec3 rotatePosition = vec3(xVal,yVal,zVal);
vec3 newPos = (position-vec3((10.*floor(position.x/10.)),0,0))+rotatePosition;
vec4 mvPosition;
mvPosition = (modelViewMatrix * vec4(newPos,1));
vViewPosition = -mvPosition.xyz;
vec4 p = projectionMatrix * mvPosition;
gl_Position = p;
Вы имеете в виду нормали – Careen
Думаете, вам нужно пересчитать их в javascript, у меня такая же проблема со смещением map – Careen
Нет нормалей в порядке –