2

この素晴らしいフレームワークに慣れようとしている新しい Babylon JS ユーザー。Sandbox とオンライン エディタを試し、標準コンポーネント (Box、Sphere など) を使用して独自のコード モデルをゼロから作成しました。私の質問は、より複雑なカスタム ジオメトリをロードする方法に関するものです。3D CAD - STL/OBJ ファイルに非常に慣れており、Blender から .Babylon 形式にエクスポートされ、Babylon のオンライン サンドボックス & エディターにインポートされます。ただし、SceneLoader がローカルの C:/ ドライブからファイルを読み取れるようには見えません。以下のコードの抜粋:

// Create new Babylon Scene
var scene = new BABYLON.Scene(engine);

// Change scene background color
scene.clearColor = new BABYLON.Color3(1, 1, 1);

// Create and positions a free camera
var camera = new BABYLON.FreeCamera("camera1", new BABYLON.Vector3(0, 10, 0), scene);

 // Target the camera to scene origin
 camera.setTarget(BABYLON.Vector3.Zero());

// Attach camera to the canvas
camera.attachControl(canvas, true);

// Define built-in 'box' shape.
var box = BABYLON.Mesh.CreateBox("sphere1", 1, scene);

// Define 'ground' plane
var ground = BABYLON.Mesh.CreateGround("ground1", 100, 100, 100, scene);
            ground.position.y = 0;
//Load local .babylon file from root Dir
BABYLON.SceneLoader.Load("", "Test.babylon", engine, scene);

私のモデルには、グラウンド プレーンを持つジオメトリ用の標準ボックスがあります。SceneLoader の行を追加するまでは、Babylon ではすべてがうまくレンダリングされます。これを追加すると、Babylon Loading イントロ スプラッシュ画面 (回転する Babylon ロゴ) でスタックします。モデルの上のコードの最後の行をコメントアウトすると、ボックスで問題なくレンダリングされます。これに関するさまざまなフォーラムページを見て、私の脳が行き詰まるところまで行き詰まりまし。 com/?p=313 セキュリティのために Google Chrome がローカル ファイル リンクをロックアウトしている可能性があると思われます。Web サーバーが必要ですか (どこから始めればよいかわかりません!)、それとも Babylon シーンをローカルで実行できますか?

4

3 に答える 3

1

したがって、この回答について 100% 確信があるわけではありませんが、役に立てば幸いです。このチュートリアルに従いました (シーンがロードされるセクションまでスキップしてください)。1 つの問題は間違いなくクロス オリジンの問題であり、もう 1 つの問題はメソッドの呼び出しSceneLoader.Load方法です。

通常の Chrome でチュートリアルのコードを試すと、Web コンソールに 3 つの警告が表示されます。Test.babylon.manifest に関する 2 つのエラー (例のファイル命名を使用) と Test.babylon に関する 1 つのエラー。マニフェストに関するものは無視できます。重要なのは、Test.babylon 自体に関するエラーです。そのため、デフォルトでは Cross Origin リクエストは許可されておらず、babylon ファイルはロードされません (期待どおり)。

ここで、Chrome を閉じてopen -a "Google Chrome" --args --allow-file-access-from-files、ターミナル (私は OSX Yosemite を使用しています) で実行して再度開き、ページを読み込むと、オブジェクトが正常に読み込まれます。Web コンソールにマニフェストに関する 2 つのエラーがまだ表示されますが、無視できます。

BABYLON.SceneLoader.Load関数の呼び出し方法に注意してください。インポート プロセスは非同期であり、最後のパラメーターは、オブジェクトが正常に読み込まれた後に何をするかのコールバック関数のように見えるためscene、元のコードのように渡すことはできないと思います。関数のドキュメントを確認してください。

于 2016-04-19T23:10:04.013 に答える
1

わかりました-ポーグレス。SceneLoader.ImportMesh を使用して実行しましたが、Python (v3) を使用して単純な HTTP サーバーをセットアップする必要がありました。このリンクは大いに役立ちました: http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python したがって、Babylon の index.html が置かれているディレクトリから Python HTTP サーバーを実行すると、HTTP が Chrome のローカル ファイル アクセス制限をバイパスしているかのように実行されます。したがって、私の問題はほとんど解決されています。これで、Test.Baylon ファイルのメッシュ ジオメトリがメイン シーンに取り込まれました。入ってくる新しいシーンが元のシーンに取って代わり、元のジオメトリが消えるため、SceneLoader.Load の使用にまだ問題があります。David - これはオプションだと思っていましたが、必要な機能についてはあなたが正しいと思います。私が言ったように、チュートリアルの例は newScene を作成し、関数内でレンダリングします。私の場合、関数で何をすべきかわかりません...おそらく「戻る」だけですか?

于 2016-04-20T08:07:49.293 に答える