ねえ! pixi.js内でthree.jsシーンをレンダリングして、後処理の方法でいくつかのフィルターを適用しようとしていますが、より効率的に行う方法は何ですか?
私には実用的な
const threeTexture = PIXI.Texture.from(threeApp.renderer.domElement)
const threeSprite = new PIXI.Sprite(threeTexture)
// divide by pixelratio to make it the correct size, on retinas it's 2
threeSprite.scale.x /= window.devicePixelRatio
threeSprite.scale.y /= window.devicePixelRatio
pixiApp.stage.addChild(threeSprite)
そして、レンダリングループで私は持っています
threeApp.draw()
threeSprite.texture.update() // tell pixi that threejs has changed
pixiApp.render()
他に何か足りないものはありますか? より良い最適化?
とにかく、本当の問題は、画面のサイズを変更するときに、次のコードをthree.jsで実行していることです。
renderer.setSize(window.innerWidth, window.innerHeight)
これは基本的にthree.jsのレンダリングされた領域の寸法を変更し、もちろんpixi.jsは壊れます。
pixi.jsにテクスチャの寸法を更新するように指示するにはどうすればよいですか?
pixi.js
バージョン:5.0.0-rcthree.js
バージョン:0.101.1その可能性のあるthreejsの例は、Issues for v4に数回投稿されましたが、v5ではまだ作成していません。
基本的に、ライブラリを変更するたびに、pixiとthreejsの両方の状態をリセットする必要があります。
現在、古いデモを提供することはできませんが、こことhttp://www.html5gamedevs.com/forum/15-pixijs/で検索でき
あなたがしなければならないのは、検索してからv5に移植することだけです、頑張ってください! あなたがどこかで失敗した場合、私は両方のことを手伝うことができます。
2Dオブジェクトと3Dオブジェクトが相互にソートされるデモも作成しましたが、それは公開していませんでした。
これで問題は解決しますか? https://github.com/pixijs/pixi.js/pull/5430修正はすでに5.0.0-rc2にあります
@ivanpopelyshev応答をありがとう! このディスカッションとこのコードスニペットをより正確に参照していると思います。
gl.disable(gl.DEPTH_TEST)
gl.enable(gl.BLEND)
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.disable(gl.STENCIL_TEST)
gl.disable(gl.CULL_FACE)
gl.frontFace( gl.CCW )
gl.cullFace( gl.FRONT )
gl.colorMask(true, true, true, true)
gl.activeTexture(gl.TEXTURE0)
var shaderManager = session.shaderManager
shaderManager._currentId = undefined
for (var i=0; i<shaderManager.attribState.length; i++)
shaderManager.attribState[i] = false
shaderManager.setShader(shaderManager.currentShader)
var blend = session.blendModeManager.currentBlendMode
if (blend in PIXI.blendModesWebGL) {
session.blendModeManager.currentBlendMode = undefined
session.blendModeManager.setBlendMode(blend)
}
ただし、このコードをどこに挿入するか、およびsession
変数とは何かがわかりません。つまり、glは3つのキャンバスのglcontextであると思います。 この例のどこに配置しますか?
https://codepen.io/marco_fugaro/pen/QYgJQY?editors=0010
(ウィンドウのサイズ変更で問題が発生し始めます)
例に5.0.0-rc.2
がありますが、何かを変更する必要がありますか?
この古い例はわかりませんが、あなたが言及したものはすべてrenderer.reset()
含まれています
const threeTexture = PIXI.Texture.from(threeApp.renderer.domElement)
これは悪い考えです。
#5430を見ましたか?
@marcofugaroこれについて他にフォローアップはありますか?
@ivanpopelyshev @bigtimebuddyお待たせして申し訳ありませんが、私はついにこれをもう一度突き刺しました。
@ivanpopelyshev PRに投稿したPIXI.Texture.from(threeApp.renderer.domElement)
悪い考えが何であったかを説明することにも注意してください?申し訳ありませんが、高度なwebglをあまり知りません)
これがpixiv5に変換された例です
https://codepen.io/marco_fugaro/pen/wOGpwv?editors=0010
私が見つけたいくつかの問題:
context
パラメーターを受け入れなくなりました。v4の例では次のようになります。var renderer = new PIXI.WebGLRenderer(canvas.width, canvas.height, {
context: context, // shared context with threejs
私はv5でこれを行っています
return new PIXI.Application({
context: context, // shared context with threejs
しかし明らかにそれは無視されます、私はデモがどのように機能しているかわかりません
three.jsテクスチャがYで反転します(私は知っています、webgl)
ウィンドウのサイズを変更すると、テクスチャが逆に引き伸ばされますか? おそらく私は何か間違ったことをしている
繰り返しになりますが、これを調べていただきありがとうございます。
これらの問題は別のプロジェクトで修正しました。後でそのコードのデモを作成します。 pixiがrenderTargets(v5 renderTextures)を使用する方法を逆にするv4のパッチがあります。
@ivanpopelyshev v5が
この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 貢献していただきありがとうございます。
古いボットはしません
これまでの更新はありますか? コードペンは機能しているようですが、ハッキーかどうかはわかりません。
最も参考になるコメント
これらの問題は別のプロジェクトで修正しました。後でそのコードのデモを作成します。 pixiがrenderTargets(v5 renderTextures)を使用する方法を逆にするv4のパッチがあります。