0
Я пытаюсь использовать shaderMaterial для регулировки яркости и контрастности на одном объекте (сфера для VR видео)Three.js неправильно текстуры на ShaderMaterial
Вот как я реализовать ShaderMaterial
var geometry = new THREE.SphereGeometry(500, 60, 40);
var panoTexture = new THREE.VideoTexture(video);
panoTexture.minFilter = THREE.LinearFilter;
panoTexture.magFilter = THREE.LinearFilter;
panoTexture.format = THREE.RGBFormat;
// var material = new THREE.MeshLambertMaterial({ map : texture });
var shader = THREE.BrightnessContrastShader;
shader.uniforms[ "contrast" ].value = 0.0;
shader.uniforms[ "brightness" ].value = 0.0;
shader.uniforms[ "texture" ].texture = panoTexture;
var panoMaterial = new THREE.ShaderMaterial(shader);
panoVideoMesh = new THREE.Mesh(geometry, panoMaterial);
А вот код, я использую для затенения
THREE.BrightnessContrastShader = {
uniforms: {
"tDiffuse": { type: "t", value: null },
"brightness": { type: "f", value: 0 },
"contrast": { type: "f", value: 0 },
"texture": { type: "t", value: 0 }
},
vertexShader: [
"varying vec2 vUv;",
"void main() {",
"vUv = uv;",
"gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);",
"}"
].join("\n"),
fragmentShader: [
"uniform sampler2D tDiffuse;",
"uniform float brightness;",
"uniform float contrast;",
"varying vec2 vUv;",
"void main() {",
"gl_FragColor = texture2D(tDiffuse, vUv);",
"gl_FragColor.rgb += brightness;",
"if (contrast > 0.0) {",
"gl_FragColor.rgb = (gl_FragColor.rgb - 0.5)/(1.0 - contrast) + 0.5;",
"} else {",
"gl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;",
"}",
"}"
].join("\n")
};
Когда сфера оказанной он использует еще совсем недавно генерироваться текстуру, которая является для другой части сцены.
Как сохранить текстуру видео на panoTexture, возможно ли это, и собираюсь ли я это сделать правильно?
Вы не используете 'texture' форму в вашем пиксельный шейдер, ваш используя' tDiffuse' форму. – 2pha
Спасибо, я попробовал shader.uniforms ["tDiffuse"] .texture = panoTexture; и это то же самое. Каждый раз, когда появляется новая текстура, созданная в другом месте, кажется, она использует эту текстуру – user5839