2012-04-30 8 views
1

私はまだ3つのビュー(完全なインタラクティブ、右から1つだけズーム、1つは上からズーム、詳細はChange the 'config' attribute of an interactor for disabling some user eventsを参照)をシーンを視覚化しようとしています。複数のビューでrender()によって変更されたロードされたオブジェクト?

ユーザーイベントの処理は問題ありません。私は3つのレンダラでオブジェクトを読み込むための2つのオプションを試しました。愚かなものとレッスン07のものです。コメント付きのコードは問題を見るためにoptionnalです(右から上へ、または上からズームするだけです)。

オプション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:愚かなオプションは、R2とR3のために黒画面を与える愚か

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(); 
}; 

、レッスン07の一つが3つのレンダラで私のオブジェクトを与えますしかし、それはr2とr3に移動しています(setPosition()をコメントしたり細心の注意を払うと、レッスン7でも表示されます。さらに、私はビューを回転するためにマウスを使用する場合、私は私のオブジェクトがr2の0に中央揃えされているのではなく、r2とr3の中央にないことがわかります。

私の質問は:do r1.render()は "オブジェクト"のバッファを変更するのですか?それは期待されていますか? Stack OverflowとGithubで同様の質問をしましたが、何も見ませんでした。

私はまた、(var object2 = new X.cube(...)によって)よく見るためにX.cubeを試しましたが、それは同じでした。


私は1回のテストで問題を見つけたと思う:私はobject.pointsを(追加)setClean()最初のレンダラに追加する前に、それは他のもののようなオブジェクトを中心にされていません。

ファイルから最初に読み込まれたオブジェクトを追加するとき、その「ポイント」は汚れていて、それ以降はきれいです。だから問題は "points.setClean();" vertexBufferが再計算されていないブロック内のrenderer.update_()で?それは普通ですか?

もし私がよく理解しているのであれば、第1のレンダラーはポイントが汚れていると見て、オブジェクトをビューの中心に合わせるために新しいボーイングボックスを計算し、オブジェクトが新しいと判断すると、 vertexBufferは、object.points属性を消去します。 - 他のレンダラーは、ポイントが汚れていないことを確認して、バーミングボックスを計算しませんが、オブジェクトが新しいのでバッファを計算することがわかります。

解決策は何ですか?私は変更の "if(points.dirty()|| transform.dirty())" renderer.update_中()、または以下のレンダラーのために、それは本当しなければなりません^^

答えて

0
var machoire = new X.object(); 
objet.load('monobjet.stl'); 
r1.add(objet); 
r2.add(objet); 
r3.add(objet); 

はそれだけで誤植か?

var objet = new X.object(); 
objet.load('monobjet.stl'); 

私は上記のバージョン1がうまくいくはずだと思います。

+0

はい、私のコードの書き換えに誤りがありますが、テスト版ではありませんでした。 – Ricola3D

+0

ここ(http://img841.imageshack.us/img841/8779/testmultiscreenload.png)は、バージョン1と単純なメッシュの結果です。レンダラー2と3では、画像が同じ方法で配置されていないことがわかります。単純なケースでは外乱ではありませんが、オブジェクトが大きくなると、レンダリングが開始されたときにオブジェクトが表示されなくなります。 – Ricola3D

+0

さらにいくつかのテスト(カメラの位置とフォーカスの設定、レンダリングのカメラから別のカメラへのビューの設定、...)は、問題のカメラではないようです。私はまた、 "objet"をコピーしてオリジナルの代わりにこのコピーをr3に追加しようとしました。そして、より良い違いを見るためにキューブを追加しました。http://img20.imageshack.us/img20/8779/testmultiscreenload.png 。 – Ricola3D