【问题标题】:Is there a way to control opacity of scene.background in THREE.js?有没有办法在 THREE.js 中控制 scene.background 的不透明度?
【发布时间】:2019-07-07 20:59:33
【问题描述】:

在这个example我想要一个视频背景,只有在相机处于特定位置时才可见(为此目的,现在它由背景颜色变黑表示)是否有可能做到而是从 白色到黑色 固定十六进制不透明颜色到 白色到透明 以便它可以显示例如使用 CSS 设置的背景图像序列/视频?我相信这是解决这个问题的一种非常奇怪和有缺陷的方法,但我正在尝试不同的方法。这是另一个one 任何建议/解释都非常感谢!

【问题讨论】:

    标签: three.js background opacity


    【解决方案1】:

    遗憾的是,scene.background 只能设置to a color, texture, or cubeMap,这意味着默认情况下它不能具有不透明度。

    但是,renderer 确实具有alpha 属性,当没有scene.background 覆盖透明部分时,它可以让您以透明度进行渲染。考虑到这一点,您可以执行以下操作:

    var renderer = new THREE.WebGLRenderer({
        alpha: true
    });
    
    function cameraInPosition() {
        // Removes the colored background
        // allowing you to see video behind the canvas
        scene.background = null;
    
        // Play whatever video you've placed behind canvas
        playVideoOrSomething();
    }
    

    它会从不透明背景跳转到透明背景,但您将能够看到画布后面的视频。

    【讨论】:

    • 为了让我现在更轻松,我使用 CSS 在正文中添加了一个简单的背景图像(我不知道如何添加全屏视频),我理解你的想法,但我不知道真的知道将代码放在哪里..顺便说一句,第一行不应该是 new THREE.WebGLRenderer 而不是 new WebGLRenderer 还是完全不同的东西?
    • 如果您使用现代风格的 JavaScript 编写,您通常只导入您需要的 three.js 的部分,在这种情况下您不会使用 THREE 命名空间。但是THREE.WebGLRendererWebGLRenderer 是一样的。
    • 是的,两者是一样的。只需确保将 alpha: true 选项添加到现有的渲染器启动。而且您已经有一个知道相机何时就位的变量,因此您可以使用它来触发上面的函数:if(distance < 0.1) { cameraInPosition();}
    • 好的!再次非常感谢你!所以我把 if(distance 放在 function animate() 里面,它就可以工作了。但是,我希望它在用户再次远离时重置回不透明背景,以便在用户到达该位置一次后背景不会永远保持可见。简单的 else { scene.background = startColor; } 成功了 :))
    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2020-09-27
    • 2021-03-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2012-02-17
    • 2011-01-28
    相关资源
    最近更新 更多