Threejs collada 3D模型在某些角度无法正确渲染

Posted

技术标签:

【中文标题】Threejs collada 3D模型在某些角度无法正确渲染【英文标题】:Threejs collada 3D model not render properly for some angle 【发布时间】:2021-02-10 12:56:55 【问题描述】:

我已将 Collada 模型用于我的一个产品 3D 预览,其中画布作为纹理,通常它工作正常,但对于某些角度,3D 角落部分渲染不正确。

我附上了画布和 3D 模态的屏幕截图以及 DAE 模态。

模态有问题吗?请找 Collada 型号here

请在下面找到我的代码:

width = 256, height = 256;
camera = new THREE.PerspectiveCamera( 1, width / height, 0.01, 300 );
camera.position.set( 8, 10, 8 );
camera.lookAt( 0, 3, 0 );
scene = new THREE.Scene();
scene.background = new THREE.Color( 0xffffff );
loadingManager = new THREE.LoadingManager( function () 
  scene.add(collada.scene ); // while loading collada model i am updating scene and assign new collada.scene to it
);

loader = new ColladaLoader( loadingManager );
ambientLight = new THREE.AmbientLight( 0xffffff, 1 );
scene.add( ambientLight );

spotLight = new THREE.SpotLight( 0xffffff, 1 );
spotLight.target = scene;
spotLight.position.set(0, 0, 0);
spotLight.castShadow = !0;
spotLight.shadow && spotLight.shadow.mapSize.set(width, height);

【问题讨论】:

【参考方案1】:

您的 Collada 文件中存在问题,尽管它不一定是渲染工件的原因。问题出在以下部分:

<library_images>
  <image id="Map #3-image" name="Map #3"><init_from>file://D:\Mit\3D Box\57.15 x 57.15 x 152.4 overlay\57.15 x 57.15 x 152.4 Open\57.15 x 57.15 x 152.4 Front Open.png</init_from></image>
  <image id="Map #5-image" name="Map #5"><init_from>file://D:\Mit\3D Box\57.15 x 57.15 x 152.4 overlay\57.15 x 57.15 x 152.4 Open\57.15 x 57.15 x 152.4 Back Open.png</init_from></image>
  <image id="Map #6-image" name="Map #6"><init_from>file://D:\Mit\3D Box\57.15 x 57.15 x 152.4 overlay\57.15 x 57.15 x 152.4 Open\57.15 x 57.15 x 152.4 Border Open.png</init_from></image>
</library_images>

如您所见,它包含针对文件系统的绝对文件路径。如果您在浏览器中加载 Collada 资产,这些定义将不起作用。假设纹理位于同一目录中,它应该是:

<library_images>
  <image id="Map #3-image" name="Map #3"><init_from>57.15 x 57.15 x 152.4 Front Open.png</init_from></image>
  <image id="Map #5-image" name="Map #5"><init_from>57.15 x 57.15 x 152.4 Back Open.png</init_from></image>
  <image id="Map #6-image" name="Map #6"><init_from>57.15 x 57.15 x 152.4 Border Open.png</init_from></image>
</library_images>

在three.js editor 中导入模型时,模型本身的几何形状似乎渲染得很好。

【讨论】:

嗨@Mugen87,我正在用画布替换纹理映射,所以它没有出现在我的最终文件中,我仍然使用相对路径作为角落有添加的问题 您确定您生成的画布实际上映射到 Collada 几何体的纹理坐标吗? 是的,当我缩小时,只有这样的问题在没有缩放的情况下才会出现,也适用于特定角度,但不适用于所有角度 您能否尝试将您的画布纹理的minFilter 属性设置为THREE.LinearFilter?此问题可能与 mipmapping 有关。

以上是关于Threejs collada 3D模型在某些角度无法正确渲染的主要内容,如果未能解决你的问题,请参考以下文章

Threejs - 导入 collada 模型在 Chrome Android 上看起来很有趣,纹理未正确加载

ThreeJS collada 文件未居中

是否有任何自动化工具可以从 COLLADA 格式的 3d 模型生成 2d 图像以显示在网站上?

如何使用 papervision3D 控制 collada 模型的动画?

如何在 Flash PaperVision3D 中调整 Collada 模型的整体 alpha 值?

部分网格在某些角度 Unity3D 变得不可见