Nano Hash - криптовалюты, майнинг, программирование

THREE.js Обратный вызов JSONLoader

В THREE.js, если у меня есть несколько вызовов JSONLoader для загрузки нескольких объектов, подобных этому (упрощенный пример):

function init() {    
  var loader = new THREE.JSONLoader();    
  loader.load("mesh1.js", createScene);    
  loader.load("mesh2.js", createScene);
}    

function createScene( geometry ) {    
  if (geometry.filename == "mesh1.js") {    
    mesh1 = new THREE.Mesh( geometry, material );
    scene.add( mesh1 );    
  } else if (geometry.filename == "mesh2.js") {    
    mesh2 = new THREE.Mesh( geometry, material );
    scene.add( mesh2 );
  }
}

Как я могу определить, какая сетка была возвращена при обратном вызове, особенно если они часто приходят не по порядку?

Я пытаюсь обработать несколько возвращенных сеток с помощью одной универсальной функции обратного вызова. Есть ли какое-то свойство в возвращенной геометрии, указывающее исходное имя файла, с которым я могу протестировать?

Или, может быть, есть более элегантный способ? Возможно, создание нового объекта THREE.JSONLoader для каждого вызова помогло бы функции обратного вызова определить, какой меш прибыл?

Я ценю любую помощь/идеи! Спасибо!


Ответы:


1

ну, есть более общий способ, чем предлагает WestLangley.

loader.load( "mesh1.js", meshloader("mesh1.js")); 
loader.load( "mesh2.js", meshloader("mesh2.js"));

тогда

function meshloader(fileName){
    return function(geometry){
        ...
    }
}

Таким образом, вы можете добавить идентификатор к каждому загружаемому файлу.

17.08.2012
  • фантастика ... Я смог заставить это работать. Я бы никогда не подумал вернуть функцию внутри функции. Мне действительно любопытно, что именно здесь происходит... Не могли бы вы немного объяснить, как/почему это работает, или указать мне направление какой-нибудь документации? 18.08.2012
  • @Dev Это то, что называется замыканием. Когда meshloader("mesh1.js") передается в качестве аргумента, он выполняется напрямую (из-за наличия круглых скобок). При выполнении возвращает другую функцию. Так что это точно так же, как если бы вы передали анонимную функцию function(geometry){...} в качестве аргумента, за исключением того, что эта анонимная функция будет выполняться как обратный вызов в контексте, где переменная fileName определена и имеет значение "mesh1.js". 23.03.2013

  • 2

    Как насчет чего-то подобного?

    loader.load( "mesh1.js", function( geometry ) { createScene( geometry, 1 ) } ); 
    loader.load( "mesh2.js", function( geometry ) { createScene( geometry, 2 ) } ); 
    

    Потом,

    function createScene( geometry, id ) {
     ...
    }
    

    id может быть именем сетки, если вы предпочитаете это.

    17.08.2012
  • Ах, я был на этом пути... конечно, он работает с константой, например 1 или 2, но проблема, похоже, в том, что когда 1 и 2 заменяются переменной, скажем, x, переменная оценивается только после возврата обратного вызова. Кажется, я не могу найти способ передать переменную в createScene со значением, определенным до вызова loader.load... смысл? проблема с масштабом? временная проблема? 17.08.2012
  • Это ответ на ваш вопрос. Вы сейчас задаете другой вопрос. Возможно, вы можете опубликовать новый выпуск. 17.08.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..