来自Json的ThreeJS几何数据无法渲染

时间:2014-10-07 14:47:47

标签: javascript json three.js

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

我有一个Json文件,我正在加载一堆数据然后我运行我的代码将正确的数据放在正确的位置,以便它可以由ThreeJS呈现(快速侧注,非常感谢mrdoob ,westLangley和ThreeJS团队的其他成员,他们已经完成了他们所做的工作,并继续参与帮助这里的人们。)

因此,在那时,网格能够被渲染并具有轨道控制等等。然后我做了一个简单的出口商,其风格与ThreeJS.org/editor类似。最大的区别在于我在一些对象上简单地使用JSON.stringify(我将在这里重点关注的是#34; geo")并将它们的数据写入新的Json(json2)。目标是,现在我可以简单地将json2加载到新程序中,该程序将填充" geo"使用json2的地理数据,从而规避了将数据放在正确位置的所有处理。

现在问题就出现了。两个" geo" s之间的所有数据似乎相同,但是当使用以下代码为代码着色时:

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

&#34; face.color没有名为setStyle&#34的函数的错误(来自记忆的粗略引用)出现。而且,这在第一个程序中完全正常。

所以我进一步研究了它,似乎在挖掘&#34;面部&#34;上面代码中的变量通过firebug,它的下拉菜单中没有构造函数或原型,因为它有第一个程序。我将上传两个下拉列表的屏幕截图,以便在一段时间内更直观地显示。 )更新:没关系,我没有足够的代表发布它们。忘了哈哈)

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

如果我在整个地方跳过这个地方,我道歉,我尽量保持尽可能线性,以尽可能减少混乱。

我们非常感谢所有人的帮助,而且我非常愿意回答任何人能够提出的任何问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

在对此进行修补之后,我找到了将json2的几何数据添加到新程序的地理位置的解决方案。

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个)在对象树中非常深,这是可以的,但可能不是最佳的。

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

我通过回到three.org/editor并看到他们的导入器如何工作并且以同样的方式粗略地尝试使用threejs加载器的东西来解决这个问题,但是真的让它更少地与实际编辑器联系在一起并且做到非常&#34;赤裸裸的&#34;这样它就能满足我的目的。话虽如此,我很好奇是否有任何ThreeJS导入器使用的加载器可以像我在这里一样填充变量。