Javascript &引用;0“;框的宽度渲染为;1“;宽度

Javascript &引用;0“;框的宽度渲染为;1“;宽度,javascript,three.js,3d,Javascript,Three.js,3d,创建长方体时 new THREE.BoxGeometry(opening.geometry.xLength, opening.geometry.yLength, opening.geometry.zLength) 当您制作一个0宽度的长方体时 new THREE.BoxGeometry(0, 1, 1) 它在屏幕上以1作为宽度进行渲染。我认为它不应该呈现任何东西。这是三个JS的错误吗?传递给BoxGeometry或BoxBufferGeometry的构造函数的维度必须为正 three.js不

创建长方体时

new THREE.BoxGeometry(opening.geometry.xLength, opening.geometry.yLength, opening.geometry.zLength)
当您制作一个0宽度的长方体时

new THREE.BoxGeometry(0, 1, 1)

它在屏幕上以1作为宽度进行渲染。我认为它不应该呈现任何东西。这是三个JS的错误吗?

传递给
BoxGeometry
BoxBufferGeometry
的构造函数的维度必须为正

three.js不验证函数或构造函数参数


three.js r.106

three.js当前代码的编写方式是0=使用默认大小1

可以通过制作大小为1的长方体并缩放几何体来解决此问题

const geometry = new THREE.BoxGeometry(); // default is 1
geometry.applyMatrix(new THREE.Matrix4().makeScale(
    opening.geometry.xLength, opening.geometry.yLength, opening.geometry.zLength));
“严格使用”;
/*全球三*/
函数main(){
const canvas=document.querySelector(“#c”);
const renderer=new THREE.WebGLRenderer({canvas});
常数fov=75;
const aspect=2;//画布默认值
常数近=0.1;
常数far=5;
常量摄影机=新的三个透视摄影机(视野、方位、近距离、远距离);
摄像机位置z=2;
const scene=new THREE.scene();
scene.background=新的三种颜色(“白色”);
功能添加灯(…位置){
常量颜色=0xFFFFFF;
常数强度=1;
恒定光=新的三个方向光(颜色、强度);
灯。位置。设置(…位置);
场景。添加(灯光);
}
addLight(-1,2,4);
addLight(2,1,4);
const geometry=new THREE.BoxGeometry();
applyMatrix(新的三个.Matrix4().makeScale(0,1,1));
const material=new THREE.MeshPhongMaterial({color:'red'});
常量框=新的三个网格(几何体、材质);
场景。添加(框);
函数resizeRenderToDisplaySize(渲染器){
const canvas=renderer.domeElement;
const width=canvas.clientWidth;
常数高度=canvas.clientHeight;
const needResize=canvas.width!==width | | canvas.height!==height;
如果(需要调整大小){
设置大小(宽度、高度、假);
}
返回需要调整大小;
}
函数渲染(时间){
时间*=0.001;
if(ResizeRenderToDisplaySize(渲染器)){
const canvas=renderer.domeElement;
camera.aspect=canvas.clientWidth/canvas.clientHeight;
camera.updateProjectMatrix();
}
box.rotation.x=时间;
box.rotation.y=时间;
渲染器。渲染(场景、摄影机);
请求动画帧(渲染);
}
请求动画帧(渲染);
}
main()
body{margin:0;}
#c{宽度:100vw;高度:100vh;显示:块;}


这个问题可能更适合ThreeJs Github,因为它似乎是一个bug或未记录的预期行为。我的猜测是,由于
0
是一个错误的值,它默认为
1
,但这只是一个猜测。经检查,我的猜测是正确的。一个解决方案是,如果宽度为
0
则不要添加或删除形状。这就是问题所在,我无法确认这是预期的行为,我只能分析幕后发生的情况。只有作者(或合作者)知道这是否是有意的。因此,为什么打开Github问题(使用我引用的行)更合适,您将获得可能的最佳答案,以及此类代码背后的原因。如果您想要一个宽度为0的框,可以缩放它
box.scale.set(0,1,1)
不是大小为0,1,1的框,仍然有效,并且应该像平面一样渲染?尝试渲染0,0,1,您将什么也看不到。这样做将导致法线矩阵不可逆。无法将几何体安全地缩放0。此外,仅供参考,请参见方法
Geometry.scale(x,y,z)0为非负。你知道哪个人可以确认这种行为是否是故意的吗?你是否有机会详细说明为什么这很重要?一旦满足某些条件,您可以隐藏长方体,您可以创建自己的几何体,您可以使用平面等。这为什么如此重要?