4

シーンをグレースケールにフェードしたいのですが、これはフェードインまたはフェードアウトしたい他の後処理効果にも当てはまります。

この例では、THREE.ColorifyShader を使用していますが、これをアクティブにすると、シーン全体が意図した色を即座に受け取ります。

後処理に「不透明度/アルファを適用」するにはどうすればよいですか?

コード例:

var effectColorify,
    copyPass;

    effectColorify = new THREE.ShaderPass(THREE.ColorifyShader);
    effectColorify.uniforms['color'].value.setRGB(0.8, 0.8, 0.8); // Grayscale

    copyPass = new THREE.ShaderPass(THREE.CopyShader);
    copyPass.renderToScreen = true;

    this.composerGrayscale = new THREE.EffectComposer(this.engine.renderer);
    this.composerGrayscale.addPass(this.renderPass);
    this.composerGrayscale.addPass(effectColorify);
    this.composerGrayscale.addPass(copyPass);
4

2 に答える 2

0

タイマーを追加して、RGB 値をゆっくりと増加させることができます。またはレンダリングループに追加します。タイマーを使用しますが、まったく同じループをレンダリング関数に適用できます。

var interval = 200; //interval for the animation in ms
var darkness = 1; //we'll start with a fade in, so we need the darknes at its biggest value
var fade = 'in';

var effectTimer = setInterval(function(){
    switch(fade){

        case 'in':
            if(darkness > 0){
                darkness -= 0.1;
            }
            else{
                fade = 'off';
            }
        break;

        case 'out':
            if(darkness < 1){
                darkness += 0.1;
            }
            else{
                fade = 'off';
            }
        break;
    }
    effectColorify.uniforms['color'].value.setRGB(darkness, darkness, darkness);
}, interval)
于 2014-12-24T15:12:52.763 に答える