私はまだ3つのビューでシーンを視覚化しようとしています(1つは完全なインタラクティブ、1つは右からズームのみ、もう1つはズームのみで上から、ここを参照してください:一部のユーザーイベントを無効にするためにインタラクターの「config」属性を変更します)。
ユーザー イベントの処理は問題ありません。オブジェクトを 3 つのレンダラーにロードするための 2 つのオプションを試しました: ばかげたものとレッスン 07 のものです。
オプション 1 : レッスン 07
var run = function() {
var r1 = new X.renderer('r1');
r1.init();
var r2 = new X.renderer('r2');
r2.init();
r2.interactor().config.MOUSECLICKS_ENABLED = false;
r2.interactor().config.KEYBOARD_ENABLED = false;
r2.interactor().config.HOVERING_ENABLED = false;
r2.interactor().config.CONTEXTMENU_ENABLED = false;
r2.interactor().init();
var r3 = new X.renderer('r3');
r3.init();
//r3.interactor().config.MOUSECLICKS_ENABLED = false;
//r3.interactor().config.KEYBOARD_ENABLED = false;
//r3.interactor().config.HOVERING_ENABLED = false;
//r3.interactor().config.CONTEXTMENU_ENABLED = false;
//r3.interactor().init();
var objet= new X.object(); //typo corrected
objet.load('monobjet.stl');
r1.add(objet);
r1.onShowtime = function() {
r2.add(objet);
r3.add(objet);
//r2.camera().setPosition(100,0,0);
//r3.camera().setPosition(0,100,0);
r2.render();
r3.render();
};
r1.render();
オプション 2 : バカ
var run = function() {
var r1 = new X.renderer('r1');
r1.init();
var r2 = new X.renderer('r2');
r2.init();
r2.interactor().config.MOUSECLICKS_ENABLED = false;
r2.interactor().config.KEYBOARD_ENABLED = false;
r2.interactor().config.HOVERING_ENABLED = false;
r2.interactor().config.CONTEXTMENU_ENABLED = false;
r2.interactor().init();
var r3 = new X.renderer('r3');
r3.init();
//r3.interactor().config.MOUSECLICKS_ENABLED = false;
//r3.interactor().config.KEYBOARD_ENABLED = false;
//r3.interactor().config.HOVERING_ENABLED = false;
//r3.interactor().config.CONTEXTMENU_ENABLED = false;
//r3.interactor().init();
var objet= new X.object(); //typo corrected
objet.load('monobjet.stl');
r1.add(objet);
r2.add(objet);
r3.add(objet);
//r2.camera().setPosition(100,0,0);
//r3.camera().setPosition(0,100,0);
r1.render();
r2.render();
r3.render();
};
愚かなオプションでは、r2 と r3 に黒い画面が表示されます。レッスン 07 のオプションでは、3 つのレンダラーでオブジェクトが表示されますが、r2 と r3 では移動しています (setPosition() にコメントするか、見てみると、レッスン 7 でも表示されます)。細心の注意を払って)。さらに、マウスを使用してビューを回転させると、オブジェクトが r2 では 0 を中心としていないのに、r2 でも r3 でも中心になっていないことがわかります。
だから私の質問は: r1.render() は私の「オブジェクト」のバッファを変更しますか? それは期待されていますか?同様の質問についてStack OverflowとGithubを見てきましたが、何も見ませんでした。
X.cube も試してみましたが (var object2 = new X.cube(...) で)、同じでした。
私は 1 つのテストで問題を見つけたと思います: 最初のレンダラーに追加する前に object.points().setClean() を追加すると、他のオブジェクトのようにオブジェクトが中心になりません。
したがって、問題は次のように思われます。ファイルからロードされたオブジェクトを初めて追加すると、その「ポイント」はダーティになり、次の時点ではクリーンになります。したがって、問題は「points.setClean();」に由来します。vertexBuffer が再計算されるブロックの renderer.update_() でいいえ ? それは正常ですか?
私がよく理解している場合:-最初のレンダラーは、ポイントが汚れていることを確認し、ビューの中心内にオブジェクトを収めるために新しい境界ボックスを計算し、オブジェクトが新しいことを確認すると、新しい vertexBuffer を計算し、オブジェクトをクリーンアップします.points 属性。- 他のレンダラーは、ポイントがもう汚れていないことを確認するため、バウンディング ボックスを計算しませんが、オブジェクトが新しいことを確認するため、バッファーを計算します。
解決策は何ですか?renderer.update_() の "if (points.dirty() || transform.dirty())" を変更するか、次のレンダラーで true にする必要があります ^^