Aframe 如何在A帧中实现动态反射

Aframe 如何在A帧中实现动态反射,aframe,Aframe,我有一个A帧场景,由一个水平面、一些灯光和一个垂直面组成,在这个垂直面上播放视频。我试图在水平面上实现反射,使其上方的垂直面被反射。我打算在反射面上设置降低的不透明度。如何在A帧中实现这一点?我编写了一个镜像组件,下面是我的代码: <script> AFRAME.registerComponent('mirror', { schema:{ renderothermirror:{default:true}, }, init: function () { var scen

我有一个A帧场景,由一个水平面、一些灯光和一个垂直面组成,在这个垂直面上播放视频。我试图在水平面上实现反射,使其上方的垂直面被反射。我打算在反射面上设置降低的不透明度。如何在A帧中实现这一点?

我编写了一个镜像组件,下面是我的代码:

<script>
AFRAME.registerComponent('mirror', {
schema:{
    renderothermirror:{default:true},
},
init: function () {
    var scene = this.el.sceneEl;
    scene.addEventListener('render-target-loaded',this.OnRenderLoaded.bind(this));
},
OnRenderLoaded: function()
{
    var mirrorObj = this.el.getOrCreateObject3D('mesh',THREE.Mesh);
    var cameraEl = document.querySelector('a-entity[camera]')
    if(!cameraEl)
    {
        cameraEl = document.querySelector('a-camera');
    }
    var camera = cameraEl.components.camera.camera;
    var scene = this.el.sceneEl;
    this.renderer = scene.renderer;
    this.mirror = new THREE.Mirror( this.renderer, camera, { clipBias: 0.003, textureWidth: window.innerWidth, textureHeight: window.innerHeight, color: 0x777777 } );
    mirrorObj.material =this.mirror.material;
    mirrorObj.add(this.mirror);
},
tick: function () {
    if(!this.data.renderothermirror)
        {
            this.mirror.render();
        }
    else
        {
            var mirrors = [];
            var mirrorEls = document.querySelectorAll("a-entity[mirror]");
            for(var i=0;i<mirrorEls.length;i++)
            {
                if(mirrorEls[i]!=this.el)
                {
                    mirrors.push(mirrorEls[i].components.mirror.mirror);
                }   
            }
            if(mirrors.length === 0)
            {
                this.mirror.render();
            }
            for(var i = 0; i<mirrors.length;i++)
            {
                this.mirror.renderWithMirror(mirrors[i]);
            }
        }
}
});
</script>

AFRAME.registerComponent('mirror'{
模式:{
renderothermirror:{default:true},
},
init:函数(){
var scene=this.el.sceneEl;
scene.addEventListener('render-target-load',this.OnRenderLoaded.bind(this));
},
OnRenderLoaded:function()
{
var mirrorObj=this.el.getOrCreateObject3D('mesh',THREE.mesh);
var cameraEl=document.querySelector('a-entity[camera]”)
如果(!cameraEl)
{
cameraEl=document.querySelector('a-camera');
}
var camera=cameraEl.components.camera.camera;
var scene=this.el.sceneEl;
this.renderer=scene.renderer;
this.mirror=new THREE.mirror(this.renderer,camera,{clipBias:0.003,textureWidth:window.innerWidth,textureHight:window.innerHeight,颜色:0x777777});
mirrorObj.material=此.mirror.material;
mirrorObj.add(this.mirror);
},
勾选:函数(){
如果(!this.data.renderothermirror)
{
this.mirror.render();
}
其他的
{
var=[];
var mirrorEls=document.querySelectorAll(“a实体[mirror]”);

对于(var i=0;i在与Craig.Li讨论之后,我稍微更改了tick函数,以处理
renderothermirror:true
且只有一个镜像的情况:
var mirrorEls=document.queryselectoral(“a-entity[mirror]”;
if(!this.data.renderothermirror | | mirrorEls.length==1)
指向Mirror.js的链接已失效。下面是一个简单完整的示例。