【问题标题】:ThreeJS export from Maya 2017 causing problems从 Maya 2017 导出的 ThreeJS 导致问题
【发布时间】:2017-10-04 04:56:56
【问题描述】:

我在从 Maya 导出到 Three.js 时遇到问题

我在 Mac 上安装了 Maya 2017,并从该站点下载了 ThreeJS - 最近。最初我下载了三个版本,.min 版本(似乎是 Revision 57)似乎工作正常。我正在使用

mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));

然后我读到这已被弃用,所以我改用mesh = new.Three.Mesh ( geometry, materials )。使用three.js,它完全失败了——没有渲染模型,也没有产生错误。它渲染舞台或在threejs中调用的任何东西,但没有别的。如果我在 json 加载器之外的脚本中生成模型,它们会正常渲染,但这并没有真正的帮助。我需要 json 来加载和渲染。

我回去尝试重新安装三个出口。与此同时,我认为版本已更改,现在我无法从 three.min.js 或 three.js 中获得任何乐趣来实例化模型。

我已经阅读了一些解决方案并尝试对模型进行三角剖分但没有任何效果 - 我仍然得到一个空的阶段并且没有产生错误。我创建了一个非常简单的模型——只是一个三角形的立方体,并没有得到任何乐趣。我查看了有关 JSON 加载器的 ThreeJS 站点上的示例 - 但它们也没有太大帮助。 如果不借助 JSONLoader 解析器来查看 JSON,那么有人有什么好主意吗?我什至不确定在哪里可以找到导出数据的正确格式。

【问题讨论】:

  • 目前,这里没有足够的具体信息来帮助您。例如,当它“完全失败”时,发生了什么?有错误信息吗?其他时候你得不到任何快乐,你得到了什么?还可以尝试将您的问题缩小到一种情况。

标签: javascript json three.js maya


【解决方案1】:

当我说我没有得到任何快乐时,我的意思是没有渲染模型并且据我所知没有错误。我当然使用控制台来检查数组的内容,例如,据我所知,材料是正确的。 正如我所提到的,我恢复到尽可能简单的模型,一个单一的立方体三角形。杰森 很短我可以发布吗? 基本问题只是没有模型显示。我检查了照明以防它被隐藏并将生成的其他对象放在 json 之外,看看我是否可以看到它,但我认为它只是没有被实例化并且不会引发错误?

我认为我的目标是从 maya 获取一个简单的 json 文件,然后将其导入到 threejs 并使用网格(几何、材质)生成我可以操作的模型。

【讨论】:

  • 一些代码而不是回答你自己的问题怎么样 :)
  • 好的 - 论坛的新用户 - 弄错了。我似乎无法删除答案,并重新发布本应进一步评论的内容。我应该删除问题并重新开始吗?
  • 您能否建议显示 JSON 的最佳位置,即使它非常小,但它仍然太大而无法发表评论?我在这里创建了 HTML 等的 JSFiddle,jsfiddle.net/weymouthwookie/8wfcr1cr - 但这并没有真正的帮助,因为它显然没有在代码的那一侧失败。
【解决方案2】:

我现在将添加一个答案,因为我有一个。

基本问题是 Maya 的 ThreeJS JSON 导出似乎不起作用 - 导出不正确,ThreeJS 不喜欢该输出的某些内容 - 无论如何我都无法让它工作。 起作用的是使用转换实用程序将 OBJ 文件更改为 JS 文件,然后可以使用相同的代码加载该文件。所以首先你从 Maya 输出一个 OBJ 文件 - 很简单。转换实用程序可以在 utils>converters>obj>convert_obj_three.py 的三个下载文件夹中找到 您必须使用控制台 - 我在 Mac 上,并且最容易将文件的副本放在您的工作文件夹中,然后一旦您导航到控制台中所有文件的正确工作文件夹,请使用此行,

python convert_obj_three.py -i myFile.obj -o myfile.js

这个生成的 JS 文件然后可以使用

加载到 threeJS 中

var jsonLoader = new THREE.JSONLoader();

//load a resource
jsonLoader.load(

//resource URL
'myFile.js',

//Function when resource is loaded
function ( geometry, materials ) {

    var material = materials[ 0 ];
    var object = new THREE.Mesh( geometry, material );
    scene.add( object );

}
);

下一个问题是东西没有显示 - 材料是黑色的。只有在它前面有东西,或者你使用网格或其他东西时,你才能看到它。我花了一段时间才通过检查控制台查看材料正在加载但它显示为黑色来解决这个问题 - 无论我对我认为是问题的照明做了什么。我发现添加材质颜色会神奇地打开它,因此添加行 material.color.setHex( 0xffffff );在scene.add(object)之前;行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2018-06-11
    • 1970-01-01
    • 2021-05-16
    • 2020-07-22
    相关资源
    最近更新 更多