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

Xtk 加载的对象由render()更改,具有多个视图?,xtk,Xtk,我仍在尝试用3个视图来可视化场景,一个是完全交互的,一个是从右侧仅缩放,一个是从顶部仅缩放,请参见此处: 用户事件的处理是正常的。我尝试了在3个渲染器中加载对象的2个选项:愚蠢的一个和第07课的一个。注释后的代码是可选的,以便查看问题,即仅通过缩放从右侧或顶部查看 选项1:第07课 var run = function() { var r1 = new X.renderer('r1'); r1.init(); var r2 = new X.renderer('r2'); r2.init();

我仍在尝试用3个视图来可视化场景,一个是完全交互的,一个是从右侧仅缩放,一个是从顶部仅缩放,请参见此处:

用户事件的处理是正常的。我尝试了在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中移动了。如果您评论设置位置或仔细查看,您也将在第7课中看到它。此外,如果我使用鼠标旋转视图,我会看到我的对象在r2中不以0为中心,但在r2或r3中不以0为中心

所以我的问题是:r1.render会改变对象的缓冲区吗?这是预期的吗?我在Stack Overflow和Github上看过类似的问题,但什么也没看到

除了通过var object2=new X.cube看得更好之外,我还尝试了使用X.cube。。。而且是一样的

我想我发现了1个测试的问题:当我在将object.points.setClean添加到第一个渲染器之前添加它时,它不像其他渲染器那样集中在对象上

因此,我们看到的问题如下: 当您第一次添加从文件加载的对象时,其点是脏的,在接下来的时间点是干净的。因此,问题来自点。setClean;在renderer.update中uu在重新计算vertexBuffer的块中否?这正常吗

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

解决办法是什么?我必须更改renderer.update中的if points.dirty | | | transform.dirty或使其适用于以下渲染器^^

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应该可以工作。

是的,只是在重写代码时出现了一个打字错误,但在我的测试版本中没有。下面是版本1和一个简单网格的结果。可以看到,在渲染器2和3中,图像的定位方式不同。在这种简单的情况下,这并不是一种干扰,但对于较大的对象,在渲染器启动时,对象恰好不在视图中。在设置摄影机位置和焦距、将视图从渲染器的摄影机设置为另一个摄影机之后。。。看来问题不在相机。我还尝试复制objet并将此副本(而不是原始副本)添加到r3,并添加了立方体以更好地查看差异,它给了我:。它是否来自方法X.renderer.prototype.update中X/Vizalization/renderer.js的1238到1277行?以及对objet的“变换”属性的操作?我想是的,但我对xtk的理解还远远不够完美,因为添加一个立方体会更新我的结果,而以前相同的渲染器也不再是了。我明白了!尝试执行以下操作:1在onShowtime函数中的渲染器上使用r.resetBoundingBox-如果您有实时版本,我也可以使用它。