带有纹理的 3D 平面上的 2D 叠加

2D overlay on top of 3D plane with texture

我想在我的飞机上画一个二维正方形,但我找不到好的解决方案。到目前为止,我只是在平面上绘制 3D 线。

geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(HANDLES[0].position.x, HANDLES[0].position.y, HANDLES[0].position.z));
geometry.vertices.push(new THREE.Vector3(HANDLES[0].position.x, HANDLES[1].position.y, HANDLES[0].position.z));
geometry.vertices.push(new THREE.Vector3(HANDLES[0].position.x, HANDLES[1].position.y, HANDLES[1].position.z));
geometry.vertices.push(new THREE.Vector3(HANDLES[0].position.x, HANDLES[0].position.y, HANDLES[1].position.z));
geometry.vertices.push(new THREE.Vector3(HANDLES[0].position.x, HANDLES[0].position.y, HANDLES[0].position.z));

material = new THREE.LineBasicMaterial( { 
  color: 0xff00f0,
  linewidth: 20 } );

line = new THREE.Line(geometry, material);
scene.add(line);

结果看起来不太好,因为线条与纹理混淆了。

在平面上绘制净 2D 形状的最佳方法是什么?然后我想将这个 2D 形状用于 select 平面中的一个感兴趣区域。

我想一个解决方案是使用正交相机 + 盒子,但我想尽可能避免这种情况。

谢谢, 尼古拉斯

为了防止 z-fighting(共面 [在同一平面上] 对象混淆),您可以将其中一个对象设置为不透明度为 1.0 的透明对象(笨拙但简单的方法),或者您可以设置 .polygonOffsetpolygonOffsetFactorpolygonOffsetUnits 在 material 上(将两者都设置为 1.0 应该很容易解决这个问题),但请随意 read more about it.