2015-10-08 11 views
8

Buduję aplikację, która pozwala użytkownikom przesyłać modele 3D w formacie obj/mtl. Administrator wyświetla podgląd tego, jak załadowany obiekt będzie wyglądał w naszej przeglądarce. Chciałbym zapewnić użytkownikowi możliwość ustawienia początkowej pozycji y załadowanego obiektu i początkowej pozycji z kamery. Mam już część z kamery, ale nie mam szczęścia z pozycją y. Mój kod:Dostęp Object3D załadowany przy użyciu OBJMTLLoader

var obj3d; 

loader.load(model_obj, model_mtl, function (object) { 
    object.position.y = y_init; 
    scene.add(object); 
    render(); 

    obj3d = object; 

    $('#initial_y').change(function() { 
     obj3d.position.y = $(this).val(); 
    }); 

}, onProgress, onError); 

Problem wydaje się, że gdy jestem poza funkcją load odniesienie do Object3D nie jest już dostępny. Powyższy kod zawiera błąd javascript:

Cannot access property 'position' of undefined. 

Każda pomoc jest bardzo doceniana!

+0

Wygląda na to, że jest to problem z zasięgiem kodu jQuery. – mrdoob

+0

Czy błąd dotyczy "object.position" lub "obj3d.position"? – gaitat

+0

@gaitat Błąd odnosi się do 'obj3d.position'. Pokazuje się, gdy zmieniono wpis "# initial_y". – Vince

Odpowiedz

5

Komentarz @mrdoob doprowadził mnie do rozwiązania tego samodzielnie. Moja zmienna obj3d była rzeczywiście poza zakresem, gdy wywołano wywołanie zwrotne jquery. Udało mi się go rozwiązać, przenosząc deklarację zmiennej do zakresu globalnego.

Ponadto powodem, dla którego nie widziałem zmian zastosowanych natychmiast w scenie three.js było to, że musiałem wywołać funkcję render().

$('#initial_y').change(function() { 
    obj3d.position.y = $(this).val(); 
    render(); 
}); 

Mam nadzieję, że to pomoże komuś innemu. Dzięki za wskazanie mi właściwego kierunku!

0

Nie jestem pewien, ale myślę, że musisz użyć obj3d = object.clone(), ponieważ później twój obiekt zostanie zniszczony.

Powiązane problemy