2013-03-12 128 views
2

我无法读取JSON文件中的数据。我已经阅读了其他关于Stack Overflow和JSON文档的JSON问题,但无济于事。从JSON文件中读取数据点

我想读取的数据显示在Three.js中。下面的代码片段工作:

var obj = { "points" : [ 
{ "vertex":[0.0,0.0,0.0] }, 
{ "vertex":[200.0,0.0,0.0] }, 
{ "vertex":[-200.0,0.0,0.0] }, 
{ "vertex":[0.0,100.0,0.0] }, 
{ "vertex":[0.0,-100.0,0.0] }, 
{ "vertex":[0.0,0.0,300.0] }, 
{ "vertex":[0.0,0.0,-300.0] }, 
{ "vertex":[75.0,75.0,75.0] }, 
{ "vertex":[50.0,50.0,50.0] }, 
{ "vertex":[25.0,25.0,25.0] } ]}; 

var geometry = new THREE.Geometry(); 

for (var i=0;i<10;i++) 
{ 
    var vertex = new THREE.Vector3(); 
    vertex.x = obj.points[i].vertex[0]; 
    vertex.y = obj.points[i].vertex[1]; 
    vertex.z = obj.points[i].vertex[2]; 
    geometry.vertices.push(vertex); 
} 

,读入点和点上下行进一步呈现。我旁边有一个名为中的index.html

test.json

一个文件时,它包含以下内容:

{ "points" : [ 
{ "vertex":[0.0,0.0,0.0] }, 
{ "vertex":[200.0,0.0,0.0] }, 
{ "vertex":[-200.0,0.0,0.0] }, 
{ "vertex":[0.0,100.0,0.0] }, 
{ "vertex":[0.0,-100.0,0.0] }, 
{ "vertex":[0.0,0.0,300.0] }, 
{ "vertex":[0.0,0.0,-300.0] }, 
{ "vertex":[75.0,75.0,75.0] }, 
{ "vertex":[50.0,50.0,50.0] }, 
{ "vertex":[25.0,25.0,25.0] } 
]} 

我的问题是,以下不工作(即不显示点):

var geometry = new THREE.Geometry(); 

var obj2 = jQuery.getJSON('test.json'); 

for (var i=0;i<10;i++) 
{ 
    var vertex = new THREE.Vector3(); 
    vertex.x = obj2.points[i].vertex[0]; 
    vertex.y = obj2.points[i].vertex[1]; 
    vertex.z = obj2.points[i].vertex[2]; 
    geometry.vertices.push(vertex); 
} 

这些文件位于我的公共文件夹Dropbox并从公共链接中查看,即使如此,以防万一我使用--allow-files-access-from-files标志运行chrome。

UPDATE

我的钥匙错误是不处理的功能的getJSON的回调顶点。我的第二个错误是假设在回调中将顶点添加到几何堆栈就足够了。事实上,我必须从几何创建对象,并将其添加到场景中才能使用。非常感谢大家的帮助。

$.getJSON('test.json', function(obj2) { 

    var geometry = new THREE.Geometry(); 

    for (var i=0;i<10;i++) 
    { 
     var vertex = new THREE.Vector3(); 
     vertex.x = obj2.points[i].vertex[0]; 
     vertex.y = obj2.points[i].vertex[1]; 
     vertex.z = obj2.points[i].vertex[2]; 
     geometry.vertices.push(vertex); 
    } 

    vc1 = geometry.vertices.length; 

    object = new THREE.ParticleSystem(geometry, shaderMaterial); 
    object.dynamic = true; 

    var vertices = object.geometry.vertices; 
    var values_size = attributes.size.value; 
    var values_color = attributes.ca.value; 

    for(var v = 0; v < vertices.length; v ++) { 
    values_size[ v ] = 50; 
    values_color[ v ] = new THREE.Color(0xffffff); 
    } 

    scene.add(object); 
}); 
+1

“不行”如何? – 2013-03-12 13:10:30

+0

对不起,它没有提供任何点。更新了问题。 – StuGrey 2013-03-12 13:12:35

回答

5

阅读文档getJSON,这是一个异步调用!

您需要将for循环放入回调函数中。

+0

抱歉,我对JavaScript很陌生。你的意思是像Max Burucker的回答那样构造它吗? – StuGrey 2013-03-12 13:25:57

+0

是的,你需要有任何呈现回调内的对象。不只是你显示的代码。 – epascarello 2013-03-12 13:46:48

1

我认为你应该做这样的

$.getJSON('test.json', function(obj2) { 
for (var i=0;i<10;i++) 
{ 
var vertex = new THREE.Vector3(); 
vertex.x = obj2.points[i].vertex[0]; 
vertex.y = obj2.points[i].vertex[1]; 
vertex.z = obj2.points[i].vertex[2]; 
geometry.vertices.push(vertex); 
} 
}); 

EDIT1 错字

+0

啊,我看到你在那里做什么,但是当我用上面的代码替换我的代码时,它仍然不显示点。 – StuGrey 2013-03-12 13:22:37

+0

谢谢你,你的代码给了我一个坚实的起点。我还必须从几何创建对象,并将其添加到场景中以使其在回调中工作。 – StuGrey 2013-03-12 14:04:34

+0

@StuGrey您可以请分享我还需要阅读json文件中三个js缓冲区几何点的位置。 – 2016-06-30 00:44:06

0

好像微小的失误。 你可以做以下几点:

1)检查是否在你的html页面引用了test.json?

2)使用firebug(控制台选项卡)检查getJson方法返回的内容是什么