【问题标题】:ThreeJS geometry data from Json not rendering来自 Json 的 ThreeJS 几何数据未渲染
【发布时间】:2014-10-09 21:57:32
【问题描述】:

首先,我是该网站的忠实粉丝,并且在遇到问题时无数次使用它来帮助我,但这是我第一次遇到需要我写问题的东西,因为我根本找不到这样的情况。

我有一个 Json 文件,我从中加载了一堆数据,然后我用我的代码运行,将正确的数据放在正确的位置,以便可以由 ThreeJS 呈现(快速旁注,非常感谢 mrdoob 、westLangley 和 ThreeJS 团队的其他成员,感谢他们所做的工作以及他们继续致力于帮助这里的人们)。

因此,此时网格能够被渲染并具有轨道控制等等。然后我制作了一个与 ThreeJS.org/editor 风格相似的简单导出器。最大的不同是我简单地在多个对象上使用 JSON.stringify(我将在这里关注的对象称为“geo”)并将它们的数据写入新的 Json(json2)。目标是现在我可以简单地将 json2 加载到新程序中,该程序将使用 json2 的地理数据填充“geo”,从而绕过将数据放在正确位置的所有处理。

现在问题来了。两个“geo”之间的所有数据似乎都是相同的,但是当要在代码中使用以下方法为人脸着色时:

for ( var i = 0; i < sD.geo.faces.length; i ++ ) {
            var face = sD.geo.faces[ i ];
            face.color.setStyle("#0066FF");
        }

出现“face.color 没有名为 setStyle 的函数”的错误(粗略来自记忆)。同样,这在第一个程序中运行良好。

所以我进一步研究了它,似乎当通过 firebug 挖掘上面代码中的“face”变量时,它的下拉菜单中没有构造函数或原型,因为它确实有第一个程序.我将上传两个下拉菜单的屏幕截图,以便稍后更直观地显示。 )更新:没关系,我没有足够的代表来发布它们。忘记了哈哈)

所以我拥有的数据没有构造函数/方法,所以我设置 sD.geo 的数据是否等于? (甚至这样做只是将顶点从 json2 设置为 sD.geo.vertices 以避免这种情况,但显然没有用)。关于我的问题可能是什么其他想法?我是否应该将这些方法添加到 json2 以及如何添加,因为我研究了很多,但找不到任何好的示例。

如果我在整个过程中跳遍了整个地方,我深表歉意,我试图使其尽可能保持线性,以尽可能少地造成混乱。

感谢任何和所有帮助,我非常愿意回答任何人提出的任何问题。

谢谢!

【问题讨论】:

  • Stringify对象到json只序列化数据,函数不序列化。
  • @HMR 是的,但我只是将数据推送到 json。我不需要尝试序列化这些函数,因为这些函数已经在新程序的地理范围内。或者至少是/应该在我将 Json2 中的数据添加到它之前。
  • 我在上述评论中的最后一句话措辞不当。这些功能应该在我要添加数据的地理区域中,但是当我添加数据时它们会消失。

标签: javascript json three.js


【解决方案1】:

在对此进行了更多修改后,我找到了将 json2 的几何数据添加到新程序的 geo 的解决方案。

function loadGeo(json) {

        var loader = new THREE.ObjectLoader();
        var object = loader.parse( json );

        var pushed = false;

        object.traverse(function(child) {

            if (child.geometry !== undefined && pushed !== true) {

                addGeometry(child.geometry);

                $.each(child.material.materials, function(cm, cMat) {

                    sD.geo.materials.push(cMat);

                });

                pushed = true;

            }

        });

    }

现在这可行,但远非完美无缺。例如,在 object.traverse 中,我进行了检查以仅添加它找到的第一个几何图形和材料,而忽略其余部分。两者都是因为我只添加了一个几何图形,而且我没有使用/研究过足够的遍历来知道任何正确的出口。同样在 json 中,材料(单个几何体大约有 24 个)在对象树中非常深,这还可以,但可能不是最优的。

我遇到的一个大问题是,由于某种原因,我分配给几何体中面的材质索引没有正确分配;它们都设置为 0(从我看到的那些,有大约 11,000 张面孔,所以无法全部查看)。一个奇怪的问题,如果我找到解决方案或其他人在此处提供解决方案,将编辑我的答案。

我通过返回 three.org/editor 并查看他们的导入器如何工作并粗略尝试以相同方式使用 threejs 加载器的东西来解决这个问题,但实际上使其与实际编辑器的联系更少并使其非常“简单”,以便仅用于我的目的。话虽如此,我很好奇是否有任何 ThreeJS 导入器使用可以像我在这里所做的那样填充变量的加载器。

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2021-05-17
    • 2014-07-09
    • 2019-04-26
    • 2019-11-07
    • 1970-01-01
    • 2020-04-14
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多