javascript - THREE.js 如何在 3d 房间模型中制作透明的前墙

标签 javascript three.js

我想在 Three.js 中制作一个 3D 房间。我希望当我旋转房间时,相机 View 前面的墙壁变得透明。

这是我需要的示例:http://jsfiddle.net/tp2f2oo4/

似乎解决方案是将 THREE.BackSide 添加到 Material 中。

var material2 = new THREE.MeshPhongMaterial( {
    color: 0xffffff, 
    transparent: false,
    side: THREE.BackSide
} );

事实上,当一个房间充当单个 THREE.BoxGeometry 时,这非常有效, 但就我而言,每面墙、天花板和地板都是独立的 THREE.BoxGeometry 对象。当它们位于相机 View 前面时,有什么方法可以隐藏它们或不渲染它们吗?

最佳答案

您想要根据某些条件隐藏网格。这是使用 onBeforeRender()onAfterRender() 方法的完美用例。

// callbacks
var onBeforeRender = function() {

    var v = new THREE.Vector3();

    return function onBeforeRender( renderer, scene, camera, geometry, material, group ) {

        // this is one way. adapt to your use case.
        if ( v.subVectors( camera.position, this.position ).dot( this.userData.normal ) < 0 ) {

            geometry.setDrawRange( 0, 0 ); // it is too late to set visible = false, so do this, instead

        }

    };

}();

var onAfterRender = function( renderer, scene, camera, geometry, material, group ) {

    geometry.setDrawRange( 0, Infinity );

};

// mesh
mesh = new THREE.Mesh( geometry, material );
mesh.position.set( 0, 0, 10 );
mesh.rotation.set( 0, 0, 0 );
scene.add( mesh );
mesh.userData.normal = new THREE.Vector3( 0, 0, - 1 );
mesh.onBeforeRender = onBeforeRender;
mesh.onAfterRender = onAfterRender;

fiddle :http://jsfiddle.net/3qh815xa/

三.js r.114

关于javascript - THREE.js 如何在 3d 房间模型中制作透明的前墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238866/

相关文章:

javascript - 从动态附加的 json 文件中删除具有匹配字符串的行

javascript - ThreeJS GLTFLoader 从 GLB 模型中获取顶点、边、面和三 Angular 形

three.js - 将 three.js 纹理拆分为 block

javascript - 使用 dat.GUI 选择颜色设置三个 js 中的一个对象的颜色

javascript - 在 Three.js 中重新定位纹理

javascript - 使用 wow.js 动画对象出现两次

javascript - jQuery 不会在使用 ajax 加载的 div 上执行

javascript - Durandal 登录页面显示

javascript - 如何让旧的 jquery 版本访问 SVG 元素

javascript - 为什么在 3D 行星上放置超过 1 个位置标记不再起作用?