Загруженные объекты, измененные render() с несколькими представлениями?
Я все еще пытаюсь визуализировать сцену с 3 видами (один полностью интерактивный, один справа только с увеличением, один сверху только с увеличением, см. Здесь: изменение атрибута 'config' интерактора для отключения некоторых пользовательских событий).
Обработка пользовательских событий в порядке. Я попробовал 2 варианта загрузки объекта в 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 (вы также увидите это в уроке 7, если прокомментируете setPosition() или посмотрите тщательно). Кроме того, если я использую мышь для поворота вида, я вижу, что мой объект не центрирован на 0 в r2, но не в r2 или r3.
Поэтому мой вопрос: изменяет ли r1.render() буферы моего "объекта"? Это ожидается? Я смотрел на Stack Overflow и Github для похожих вопросов, но ничего не видел.
Я также попытался с X.cube в дополнение, чтобы увидеть лучше (с помощью var object2 = new X.cube(...)), и это было то же самое.
Я думаю, что нашел проблему с 1 тестом: когда я добавляю object.points(). SetClean() перед добавлением его в первый рендерер, он не центрируется на объекте, как другие.
Таким образом, проблема выглядит следующим образом: когда вы добавляете объект, загруженный из файла в первый раз, его "точки" становятся грязными, а в последующие - чистыми. Таким образом, проблема возникает из "points.setClean();" в renderer.update_() в блоке, где пересчитывается vertexBuffer нет? Это нормально?
Если я хорошо понимаю: - 1-й рендерер видит, что точки грязные, и поэтому вычисляет новое всплывающее окно, чтобы соответствовать объекту в центре представления, а затем, когда он видит объект новым, он вычисляет новый vertexBuffer и очищает объект Атрибут.points. - другие средства визуализации видят, что точки больше не являются грязными, поэтому они не вычисляют boudning box, но они видят, что объект является новым, поэтому они вычисляют буфер.
Какое может быть решение? Я должен изменить "if (points.dirty() || transform.dirty())" в renderer.update_() или сделать его истинным для следующих средств визуализации ^^
1 ответ
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 сверху должна работать.