Javascript pixi.js和three.js可以一起使用吗?

Javascript pixi.js和three.js可以一起使用吗?,javascript,3d,three.js,pixi.js,Javascript,3d,Three.js,Pixi.js,是否可以使用pixi.js制作二维图形,然后使用three.js添加三维对象或在同一视图中旋转二维pixi对象 例如,是否可以使用pixi制作2D gui,然后使用three.js将其旋转到3D场景中 或者像这样使用这两个库是不可能的?不,您需要两个不同的画布。 一种可能是将pixi的画布渲染为纹理并将其映射到3d形状(在three.js canvas中),但它看起来既不容易也不有用。 我建议您使用CCS3转换,以便将3D转换应用于pixi的画布 我可以问一下你想要达到什么目标吗?不,你需要两张

是否可以使用pixi.js制作二维图形,然后使用three.js添加三维对象或在同一视图中旋转二维pixi对象

例如,是否可以使用pixi制作2D gui,然后使用three.js将其旋转到3D场景中


或者像这样使用这两个库是不可能的?

不,您需要两个不同的画布。 一种可能是将pixi的画布渲染为纹理并将其映射到3d形状(在three.js canvas中),但它看起来既不容易也不有用。 我建议您使用CCS3转换,以便将3D转换应用于pixi的画布


我可以问一下你想要达到什么目标吗?

不,你需要两张不同的画布。 一种可能是将pixi的画布渲染为纹理并将其映射到3d形状(在three.js canvas中),但它看起来既不容易也不有用。 我建议您使用CCS3转换,以便将3D转换应用于pixi的画布


我可以问你你想要实现什么吗?

是的,他们可以做到,而且非常简单。如果您有很多自定义形状、文本或复杂的呈现,那么这将很容易优于在常规html、css和javascript中进行相同的处理

三个JS可以通过执行以下操作使用Pixi JS渲染:

// globals
var pixiCanvas, pixiRenderer, threeJsPixiTexture;

// one time setup
const width = 8192; // change to your desired value
const height = 4096; // change to your desired value
pixiCanvas = document.createElement('canvas');
pixiCanvas.width = width;
pixiCanvas.height = height;
pixiRenderer = new PIXI.Renderer({ view: pixiCanvas, width: width, height: height, antialias: false, autoResize: false, resolution: 1.0, transparent: true });
threeJsPixiTexture = new THREE.CanvasTexture(pixiRenderer.view);

// render logic (in animate method most likely)

// Render stuff with pixiRenderer...
// draw rects, text, a container, whatever you want

// make sure texture updates
threeJsPixiTexture.needsUpdate = true;

// you can assign threeJsPixiTexture to the map on a material, render it as full screen quad, etc.

是的,他们可以,而且非常简单。如果您有很多自定义形状、文本或复杂的呈现,那么这将很容易优于在常规html、css和javascript中进行相同的处理

三个JS可以通过执行以下操作使用Pixi JS渲染:

// globals
var pixiCanvas, pixiRenderer, threeJsPixiTexture;

// one time setup
const width = 8192; // change to your desired value
const height = 4096; // change to your desired value
pixiCanvas = document.createElement('canvas');
pixiCanvas.width = width;
pixiCanvas.height = height;
pixiRenderer = new PIXI.Renderer({ view: pixiCanvas, width: width, height: height, antialias: false, autoResize: false, resolution: 1.0, transparent: true });
threeJsPixiTexture = new THREE.CanvasTexture(pixiRenderer.view);

// render logic (in animate method most likely)

// Render stuff with pixiRenderer...
// draw rects, text, a container, whatever you want

// make sure texture updates
threeJsPixiTexture.needsUpdate = true;

// you can assign threeJsPixiTexture to the map on a material, render it as full screen quad, etc.

是的,可以将它们粘合在一起,但这取决于您需要使用它做什么(您的2D GUI将如何工作)?很有趣。你最近在安卓上试过twitter界面吗?这是一个2D界面,但当你转到一个新的视图/屏幕时,会有一个轻微的3D缩放动画。像这样微妙的事情正是我所想象的。你觉得这样行吗?你能简单描述一下这两者是如何粘合在一起的(描述一个小用例)?这听起来像是一个需要,通过使用CSS动画/翻译可以更好地满足。是的,可以将它们粘合在一起,但这取决于你需要用它做什么(你的2D GUI如何工作)?有趣。你最近在安卓上试过twitter界面吗?这是一个2D界面,但当你转到一个新的视图/屏幕时,会有一个轻微的3D缩放动画。像这样微妙的事情正是我所想象的。你觉得这样行吗?你能简单地描述一下这两者是如何粘合在一起的吗(描述一个小用例)?这听起来像是一个需要,使用CSS动画/翻译会更好地满足这个需要谢谢jixtra!这确实是一个很好的混合方式。我还想知道,是否有可能在同一个3D空间中,将它们混合在一张画布上,但这似乎不可行。一种方法是每个Pixi形状有一个单独的画布,但这可能会很昂贵。我不确定是否可以共享同一个画布。我想你可以将相同的画布传递给pixi和三个js渲染器,看看会发生什么:)对我来说,我希望pixi js纹理在单独的材质中,而不是全屏,所以我需要单独的画布,但是如果你只想pixi作为全屏覆盖,你可以尝试在同一画布上运行。谢谢jixtra!这确实是一个很好的混合方式。我还想知道,是否有可能在同一个3D空间中,将它们混合在一张画布上,但这似乎不可行。一种方法是每个Pixi形状有一个单独的画布,但这可能会很昂贵。我不确定是否可以共享同一个画布。我想你可以将相同的画布传递给pixi和三个js渲染器,看看会发生什么:)对我来说,我希望pixi js纹理在一个单独的材质中,而不是全屏,所以我需要单独的画布,但如果你只希望pixi作为全屏覆盖,你可以尝试在同一画布上运行,但是我想把pixi对象放在与Three.js对象相同的3D空间中。一种方法是将单个Pixi对象渲染为单独的画布,并从中生成一个THREE.canvaTexture,但这会很昂贵。响应较晚,但我想将Pixi对象放置在与THREE.js对象相同的3D空间中。一种方法可能是将单个Pixi对象渲染为单独的画布,并从中生成一个3.canvaTexture,但这将非常昂贵。