gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 12:17:22 25 4
gpt4 key购买 nike

我想在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com