Pixi.js: هل تريد عرض three.js داخل pixi.js؟

تم إنشاؤها على ٦ فبراير ٢٠١٩  ·  11تعليقات  ·  مصدر: pixijs/pixi.js

مهلا! أحاول عرض مشهد three.js داخل 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()

أي شيء آخر أنا في عداد المفقودين؟ بعض التحسين أجمل؟

على أي حال ، المشكلة الحقيقية هي عندما أقوم بتغيير حجم الشاشة ، لدي هذا الرمز يعمل في ثلاثة ملفات js:

renderer.setSize(window.innerWidth, window.innerHeight)

الذي يغير أبعاد المنطقة المعروضة لـ three.js ، وبالطبع فواصل pixi.js.

screenshot 2019-02-06 at 02 00 02

كيف أخبر pixi.js بتحديث أبعاد النسيج؟

بيئة

🤔 Question

التعليق الأكثر فائدة

لقد أصلحت هذه المشكلات في مشروع آخر ، وسأقوم بعمل عرض توضيحي لهذا الرمز لاحقًا. هناك تصحيح لـ v4 يعكس طريقة استخدام pixi لـ renderTargets (v5 renderTextures).

ال 11 كومينتر

تم نشر أمثلة threejs المحتملة عدة مرات في إصدارات v4 ، لكنني لم أجعلها لـ v5 حتى الآن.
بشكل أساسي ، يجب عليك إعادة تعيين كل من حالة pixi و threejs في كل مرة تقوم فيها بتغيير المكتبات.

لا يمكنني تقديم عروض توضيحية قديمة في الوقت الحالي ، ولكن يمكنك البحث عنها هنا وفي http://www.html5gamedevs.com/forum/15-pixijs/ . تمت أيضًا مناقشة مشاركة الملمس في مكان ما.

كل ما عليك فعله هو البحث ثم الانتقال إلى الإصدار 5 ، حظًا سعيدًا! يمكنني المساعدة في كلا الأمرين إذا فشلت في مكان ما.

حتى أنني قدمت عرضًا توضيحيًا حيث يتم فرز الكائنات ثنائية وثلاثية الأبعاد من خلال بعضها البعض ، لكن هذا الكائن لم أشاركه في الأماكن العامة.

هل هذا يحل مشاكلك؟ 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 هو 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 شكرًا pixi الذي نشرته في العلاقات العامة ، لقد كان مفيدًا حقًا ، لقد حاولت تنفيذ الطريقة 2 في المثال التالي (أهتم أيضًا بشرح الفكرة السيئة باستخدام PIXI.Texture.from(threeApp.renderer.domElement) ؟ آسف لا أعرف الكثير من webgl المتقدم)

هذا هو المثال الذي تم تحويله إلى pixi v5

https://codepen.io/marco_fugaro/pen/wOGpwv؟editors=0010

بعض المشكلات التي وجدتها:

  1. PIXI.Application لا يقبل بعد الآن معلمة context ، في مثال v4 هناك:
var renderer = new PIXI.WebGLRenderer(canvas.width, canvas.height, {
  context: context, // shared context with threejs

أنا أفعل هذا في الإصدار الخامس

 return new PIXI.Application({
    context: context, // shared context with threejs

ولكن من الواضح أنه يتم تجاهله ، لا أعرف كيف يعمل العرض التوضيحي

  1. تم قلب نسيج three.js على Y (أعرف ، webgl)

  2. عند تغيير حجم النافذة ، يتم شد النسيج بطريقة معاكسة؟ ربما أفعل شيئًا خاطئًا

مرة أخرى ، شكرًا لك على النظر في هذا!

لقد أصلحت هذه المشكلات في مشروع آخر ، وسأقوم بعمل عرض توضيحي لهذا الرمز لاحقًا. هناك تصحيح لـ v4 يعكس طريقة استخدام pixi لـ renderTargets (v5 renderTextures).

ivanpopelyshev هل يمكنك إصلاح المثال الآن بعد أن خرج الإصدار 5؟ 🙏

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه في حالة عدم حدوث أي نشاط آخر. شكرا لمساهماتكم.

الروبوت الذي لا معنى له لا

أي تحديث حتى الآن؟ يبدو أن codepen يعمل ولكنني لست متأكدًا مما إذا كان متطفلًا أم لا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

finscn picture finscn  ·  3تعليقات

readygosports picture readygosports  ·  3تعليقات

courtneyvigo picture courtneyvigo  ·  3تعليقات

samueller picture samueller  ·  3تعليقات

gaccob picture gaccob  ·  3تعليقات