Пусто {} или неопределенный ответ при RayCasting GLB 3D -модель для извлечения пользовательских данныхJavascript

Форум по Javascript
Ответить
Anonymous
 Пусто {} или неопределенный ответ при RayCasting GLB 3D -модель для извлечения пользовательских данных

Сообщение Anonymous »

Я прочитал несколько сообщений об этом, но я все еще могу выяснить, что происходит в моем коде. У меня есть сцена Three.js, и я загружаю в нее несколько моделей GLB. Что я хочу сделать, так это прикрепить некоторые данные, поступающие от JSON к каждой модели и извлекать эти данные, когда я наведу мышью над ней. Моя проблема заключается в том, что я получаю {} или неопределенную от ответа Raycast всякий раз, когда я падаю объекты в сцене.
Это мой код для загрузки моделей:

Код: Выделить всё

const dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath('jsm/libs/draco/gltf/');

const loader = new GLTFLoader();
loader.setDRACOLoader(dracoLoader);

function loadModel(loader, modelToLoad, jsonDestinationData, jsonItemInfo) {
loader.load(
modelToLoad,
function (gltf) {
const model = gltf.scene;

model.userData = {
description: jsonItemInfo.description,
type: jsonItemInfo.type
};
model.translateX(jsonDestinationData.length);

itemsToRead.push(model);
scene.add(model);
console.log(model.userData);
},
undefined,
function(e) {
console.error(e);
}
);
}
< /code>

[*]modelToLoad
- это строка с путем файла GLB.
[*]

Код: Выделить всё

jsonDestinationData
- это некоторые данные о том, где модель будет загружена внутри сцены.
[*]

Код: Выделить всё

jsonItemInfo
- это данные, поступающие из файла JSON, который я хочу передать модель с использованием model.userData .

Код: Выделить всё

itemsToRead
- это массив элементов, которые я хочу получить информацию, когда я нахожусь, а модель.userdata - это информация, которую я хочу получить из модели при падении. Я могу прочитать нужную информацию, которую я хочу напечатать в консоли. < /P>
Это мой код для Raycast: < /p>

Код: Выделить всё

raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(itemsToRead, true);
if (intersects.length > 0) {
var selectedObject = intersects[0].object;
console.log(selectedObject.userData);
}
из этой второй консоли.log (selectedObject.userData) Когда функция интерсекта выполняется во время наказания, я получаю {} , напечатанную в консоли вместо пользовательского кода , я ожидаю увидеть, что
можно добавить, чтобы добавить модели, чтобы добавить, чтобы добавить модели
, это можно добавить, чтобы добавить модели
). Есть ли что -то отсутствующее в функции Raycast, чтобы правильно извлечь данные или для этого случая эта операция невозможна?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ving-userd
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»