Получаване на нормал на лицето на мрежата с помощта на raycaster intersectObjects - Three.js

Опитах се да получа нормата на лицето на мрежата, използвайки тези:

ray = new THREE.Raycaster(x, y); 
var intersection = ray.intersectObjects(objectsOptical, true);
var vector = intersection[0].face.normal;

Добавени intersection[0].point и intersection[0].face.normal (умножено по константа) като един връх и intersection[0].point като втори връх на (сива) линия. И получих това (червените линии са лъчи, а сивите трябва да са нормални - но не са): Илюстративно изображение

Моля, помогнете ми да получа НОРМАЛИ на мрежата FACE.

Благодаря ти.


person Štěpán Venos    schedule 08.02.2014    source източник


Отговори (1)


Нормалните стойности, които сте начертали с червени линии, изглеждат така, сякаш може да са правилни, като се вземе предвид перспективната проекция.

Тестът на raycast удря едно триъгълно лице от вашата мрежа. Нормалното, което имате предвид, е нормалното за лицевия обект, който лъчът е ударил, т.е. от оригиналната мрежа.

В изходния код за THREE.Raycaster изчисленията на пресичането могат да се видят като връщат лицето директно.

На друго място се предполага, че Ray.intersectObjects() изисква лицеви центроиди. Въпреки това не съм сигурен в това, тъй като изходният код не се отнася за центроиди.

Може би нормалите в оригиналната геометрия не са правилни. Първо опитайте тази функция:

geometry.computeFaceNormals();
person ʀᴏʙ    schedule 09.02.2014