4

シンプルな WebGL プロジェクトを作成していて、モデルをロードする方法が必要です。私は OBJ 形式を使用することにしたので、それをロードする方法が必要です。ファイルは (これから) サーバーに保存されます。私の質問は、JS でテキスト ファイルをロードして 1 行ずつスキャンする方法です。トークンごとに (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];
    }

    // ...
}
4

2 に答える 2

3

メインのWebページと同じドメインからのファイルであると仮定して、XMLHttpRequestを使用してファイルをフェッチできます。そうでない場合で、ファイルをホストしているサーバーを制御できる場合は、それほど問題なくCORSを有効にできます。例えば

行ごとにスキャンするには、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();
于 2012-11-26T23:35:30.283 に答える
0

XHRまたはCORSを使用してデータを単純にロードできない場合は、JavaScript関数でデータをラップし、スクリプトタグをページに動的にアタッチすることで、いつでもJSON-Pメソッドを使用できます。

パラメータを受け入れ、のcallbackようなものを返すサーバー側スクリプトがありますcallback1234(/* file data here */);

データを取得したら、構文解析は簡単なはずですが、独自の構文解析関数を作成する必要があります。箱から出してそのために何も存在しません。

于 2012-11-26T23:29:14.000 に答える