2

前のレンダリングを次のレンダリングのテクスチャとして使用して、プログレッシブレンダリングを実行しようとしています。

EDIT 1:コメントで示唆されているように、THREE.jsのバージョンを利用可能な最新のものに更新し、古いコードを保持しましたが、結果は同じです(オブジェクトの垂直位置が反転した場合でも)。そして、私の問題はまだ残っています。私の最新情報と助けを祈ってください。

Original message:

私のフラグメントシェーダーは、次のように、緑のチャンネルの色を0.1だけインクリメントする必要があります。

#ifdef GL_ES
precision highp float;
#endif
uniform sampler2D sampa;
varying vec2 tc;

void main(void)
{
     vec4 c = texture2D(sampa, tc);
     vec4 t = vec4(c.x, c.y + .1, c.z, 1.);
     gl_FragColor = t;
}

私の作曲家はこんな感じです:

composer.addPass(renderModel);
composer.addPass(screenPass);
composer.addPass(feedPass);

renderModelがRenderPassである場合、平面と立方体があるシーンをレンダリングします。screenPassとfeedPassは同じですが、唯一の違いは、一方が画面にレンダリングされ、もう一方がwriteBuffer(composer.renderTarget1)でレンダリングされることです。

var renderModel = new THREE.RenderPass(scene, camera);
renderModel.clear = false;

screenPass = new THREE.ShaderPass(shader2, 'sampa');
screenPass.renderToScreen = true;
screenPass.clear = false;
screenPass.needsSwap = false;

feedPass = new THREE.ShaderPass(shader2, 'sampa');
feedPass.renderToScreen = false;
feedPass.clear = false;
feedPass.needsSwap = false;

そして、アニメーションループでは、次のようなものがあります。

composer.render();
if(step % 250 == 0)
{
    newmat = new THREE.MeshBasicMaterial(
    {
        map : composer.renderTarget1
    });

    plane.material = newmat;
}
step++;
requestAnimationFrame(animate);

の部分step % 250は、材料の変更を遅らせることです。

とにかく、問題はそれが起こったときに飛行機が消えているということです。最初の250ステップで正しくレンダリングされたとしても。まだそこにあると思いますが、テクスチャデータがないため、実際にはレンダリングされません。

EffectComposerはライブラリの一部ではなく、例にのみ含まれており、サポートされていない可能性があることを知っていますが、この状況についてアドバイスをいただければ幸いです。

問題に関するその他の情報、または私が非常に喜んで共有するのに役立つ可能性のあるその他のコードについて。

私が間違っていることを指摘してもらえますか?

何卒よろしくお願い申し上げます。

4

1 に答える 1

0

この問題の解決策は、twoRenderTargets を使用し、すべてのステップでそれらを切り替えることです。私の知識が限られているため、その理由を正確に理解することはできませんが、これがまさに EffectComposer の仕組みです。この問題を抱えている可能性があり、解決策が必要な場合は、シェーダー パスの設定needsSwapを試してみてください。trueまた、EffectComposer を使用しない場合は、2 つのレンダー ターゲットを使用することを忘れないでください。

于 2013-08-13T13:06:00.637 に答える