【发布时间】:2021-07-12 01:54:57
【问题描述】:
通过将所有内容导出为 THREE.Effectcomposer、THREE.SSAOPass 等并将效果添加到 aframe 组件中,我能够成功地将 Threejs Effect composer 作为组件集成到 aframe 中,我调整了 AFrame 渲染器以更新场景。 Threejs 的 OutlinePass 在此代码中运行良好,但 SSAO 无法正常工作,我没有收到任何错误。请有人帮我找出问题所在。 SSAOPass 的代码如下所示
AFRAME.registerComponent('ssao', {
init: function () {
this.el.addEventListener('that', evt => this.onEnter());
this.el.addEventListener('mouseleave', evt => this.onLeave());
setTimeout(() => this.el.emit("that"), 2000);
},
onEnter: function () {
const scene = this.el.sceneEl.object3D;
const camera = this.el.sceneEl.camera;
const renderer = this.el.sceneEl.renderer;
const render = renderer.render;
const composer = new THREE.EffectComposer(renderer);
//let renderPass = new THREE.RenderPass(scene, camera);
//let outlinePass = new THREE.OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight), scene, camera);
const ssaoPass = new THREE.SSAOPass( scene, camera, window.innerWidth, window.innerHeight );
//composer.addPass(renderPass);
//composer.addPass(outlinePass);
ssaoPass.kernelRadius = 16;
composer.addPass( ssaoPass );
// let objects = [];
// this.el.object3D.traverse(node => {
// if (!node.isMesh) return;
// objects.push(node);
// });
// outlinePass.selectedObjects = objects;
// outlinePass.renderToScreen = true;
// outlinePass.edgeStrength = this.data.strength;
// outlinePass.edgeGlow = this.data.glow;
// outlinePass.visibleEdgeColor.set(this.data.color);
// HACK the AFRAME render method (a bit ugly)
const clock = new THREE.Clock();
this.originalRenderMethod = render;
let calledByComposer = false;
renderer.render = function () {
if (calledByComposer) {
render.apply(renderer, arguments);
} else {
calledByComposer = true;
composer.render(clock.getDelta());
calledByComposer = false;
}
};
},
onLeave: function () {
this.el.sceneEl.renderer.render = this.originalRenderMethod;
},
remove: function () {
this.onLeave();
}
});
我还创建了一个故障项目,我在这里分享。请随时加入我的项目并进行合作 编辑链接:https://glitch.com/edit/#!/accessible-torpid-partridge 网站链接:https://accessible-torpid-partridge.glitch.me
提前致谢
【问题讨论】:
-
你能更新一下故障链接吗?我很想知道你是如何让 OutlinePass 和 EffectComposer 在 A-Frame 中工作的。
标签: html three.js aframe webvr post-processing