由多个视图的render()更改的加载对象?

时间:2012-04-30 15:58:57

标签: xtk

我仍在努力想象一个有3个视图的场景(一个完整的互动,一个从右边只有缩放,一个从顶部只有缩放,见这里:Change the 'config' attribute of an interactor for disabling some user events)。

用户事件的处理是可以的。我在3个渲染器中尝试了两个加载对象的选项:愚蠢的一个和第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为中心,而是以r2和r3为中心。

所以我的问题是:r1.render()改变我的“对象”的缓冲区吗?这是预期的吗?我查看了Stack Overflow和Github的相似问题,但没有看到任何内容。

我还尝试使用X.cube以及更好看(通过var object2 = new X.cube(...))并且它是相同的。


我认为我发现了1个测试的问题:当我将object.points()。setClean()添加到第一个渲染器之前,它不会像其他渲染器一样居中于对象。

所以我们看到了以下问题: 当您第一次添加从文件加载的对象时,其“点”是脏的,并且在以下时间它们是干净的。所以问题来自“points.setClean();”在重新计算vertexBuffer的块中的renderer.update_()中没有?这是正常的吗?

如果我理解: - 第一个渲染器看到点是脏的,因此计算一个新的boudning框以使对象适合视图的中心,然后当他看到对象是新的时,他计算一个新的vertexBuffer并清理object.points属性。 - 其他渲染器看到点不再脏,所以他们不计算boudning框,但他们看到对象是新的,所以他们计算缓冲区。

什么是解决方案?我必须在renderer.update_()中更改“if(points.dirty()|| transform.dirty())”或对以下渲染器使其为true ^^

1 个答案:

答案 0 :(得分: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应该有用。