问题更新在底部....
我正在用 Ruby 编写自定义 SketchUp 导出插件。然后,我使用导出的数据在 Three.js 中重新创建几何图形。
我在某些组件/组转换方面遇到了麻烦,并将其追踪到镜像或对某些轴应用了“翻转”的几何图形。简而言之,不尊重翻转。我找不到任何 SU Ruby 方法来确定任何给定实体是否应用了这种翻转。
我可以得到一个转换矩阵,并对其进行转换(参见我的这个问题如何),但是它不适用于这些翻转的对象。这是一个示例结果;模型的其余部分很好,但船显然是使用翻转的船半部创建的,在这张照片中,它们到处都是:
如何正确考虑这些翻转的几何图形?他们在 SU Ruby 中有某种单独的矩阵或实体标志吗?
注 1)我在内置 SketchUp Collada 导出器中观察到类似的错误行为(使用 Three.js ColladaLoader 加载它们时)。
注 2)虽然我认为这是一个 SketchUp Ruby API 问题,但我用 Three.js 标记了这个问题,以防万一我在镜像和矩阵方面遗漏了一些明显的东西。
注 3)如果使用缩放工具而不是沿工具翻转(实际上结果相同)翻转/镜像几何图形,它们可以正常工作。
更新:
仍在努力应用此信息,但根据此信息越来越近:http: //sketchucation.com/forums/viewtopic.php ?f=6&t=3083
更新#2:
感谢 Thomthom,我能够检测到未旋转的对象并对其应用正确的翻转。对于普通的未旋转/未缩放/未翻转组件,矩阵为:
1.0, 0.0, 0.0
0.0, 1.0, 0.0
0.0, 0.0, 1.0
对于翻转(镜像)组件,矩阵可以是:
-1.0, 0.0, 0.0
0.0, 1.0, 0.0
0.0, 0.0, 1.0
所以我可以很容易地检测到那个翻转,一切都很好。
但是,如果我将相同的组件(未翻转)任意旋转几个轴,则矩阵如下所示:
-0.33, -0.58, 0,74
0.87, -0.50, 0,00
0.37, 0.64, 0,67
这在我的导出器/导入器中正常工作,我可以在 Three.js 端重新应用这个矩阵。
但是当那个已经旋转的组件也被镜像时,矩阵看起来像这样:
0.33, 0.58, -0.74
0.87, -0.50, 0.00
0.37, 0.64, 0.67
我无法让这个矩阵在 Three.js 中正常工作,并且组件永远不会被镜像,从而导致在图片中可以看到的行为。
所以,我不确定该怎么做。object.scale.x = object.scale.x * -1;
通过检测更简单的情况(仅翻转,未旋转或缩放),然后在 Three.js 中为此类组件进行设置,我能够获得正确的结果。但是对于翻转和以其他方式旋转或缩放的项目没有解决方案:(