我正在创建一个简单的WebGL项目,需要一种方法来加载模型。我决定使用OBJ格式,所以我需要一种方法来加载它。文件(将要)存储在服务器上,我的问题是:JS中的一个如何加载文本文件并逐行扫描,令牌(如C ++中的流)?我是JS的新手,因此我的问题。越简单,越好。
更新:我使用了你的解决方案,broofa,但我不确定我是否做得对。我从你编写的forEach循环中的文件中加载数据,但在它之外(即在你的所有代码之后),我填充数据的对象是“未定义”。我究竟做错了什么?这是代码:
var materialFilename;
function loadOBJModel(filename)
{
// ...
var req = new XMLHttpRequest();
req.open('GET', filename);
req.responseType = 'text';
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
var lines = req.responseText.split(/\n/g);
lines.forEach(function(line)
{
readLine(line);
});
}
}
req.send();
alert(materialFilename);
// ...
}
function readLine(line)
{
// ...
else if (tokens[0] == "mtllib")
{
materialFilename = tokens[1];
}
// ...
}
答案 0 :(得分:3)
您可以使用XMLHttpRequest来获取文件,假设它来自与主网页相同的域。如果没有,并且您可以控制托管文件的服务器,则可以启用CORS而不会有太多麻烦。 E.g。
要逐行扫描,您可以使用split()。例如。像这样......
var req = new XMLHttpRequest();
req.open('GET', '/your/url/goes/here');
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
var lines = req.responseText.split(/\n/g);
lines.forEach(function(line, i) {
// 'line' is a line of your file, 'i' is the line number (starting at 0)
});
} else {
// (something went wrong with the request)
}
}
}
req.send();
答案 1 :(得分:0)
如果您不能简单地使用XHR或CORS加载数据,则可以始终使用JSON-P方法将其包装为JavaScript函数并将脚本标记动态附加到页面。
您将拥有一个接受callback
参数的服务器端脚本,并返回callback1234(/* file data here */);
之类的内容。
获得数据后,解析应该是微不足道的,但您必须编写自己的解析函数。开箱即用的东西都没有。