تم تصميم هذه الفئة للمساعدة في [link:https://en.wikipedia.org/wiki/Ray_casting raycasting]. يتم استخدام Raycasting لاختيار الماوس (العمل على معرفة الكائنات في المساحة ثلاثية الأبعاد التي يكون عليها الماوس فوق) من بين أشياء أخرى.
const raycaster = new THREE.Raycaster();
const pointer = new THREE.Vector2();
function onPointerMove( event ) {
// حساب موضع المؤشر في إحداثيات الجهاز المعتدلة
// (-1 إلى +1) لكلا المكونين
pointer.x = ( event.clientX / window.innerWidth ) * 2 - 1;
pointer.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
}
function render() {
// تحديث شعاع التقاط مع الكاميرا وموضع المؤشر
raycaster.setFromCamera( pointer, camera );
// حساب الكائنات المتقاطعة مع شعاع التقاط
const intersects = raycaster.intersectObjects( scene.children );
for ( let i = 0; i < intersects.length; i ++ ) {
intersects[ i ].object.material.color.set( 0xff0000 );
}
renderer.render( scene, camera );
}
window.addEventListener( 'pointermove', onPointerMove );
window.requestAnimationFrame(render);
[example:webgl_interactive_cubes Raycasting to a Mesh]
[example:webgl_interactive_cubes_ortho Raycasting to a Mesh in using an OrthographicCamera]
[example:webgl_interactive_buffergeometry Raycasting to a Mesh with BufferGeometry]
[example:webgl_instancing_raycast Raycasting to a InstancedMesh]
[example:webgl_interactive_lines Raycasting to a Line]
[example:webgl_interactive_raycasting_points Raycasting to Points]
[example:webgl_geometry_terrain_raycast Terrain raycasting]
[example:webgl_interactive_voxelpainter Raycasting to paint voxels]
[example:webgl_raycaster_texture Raycast to a Texture]
[page:Vector3 origin] — متجه المنشأ الذي يلقي منه الشعاع.
[page:Vector3 direction] — متجه الاتجاه الذي يعطي اتجاهًا
للشعاع. يجب تعديله.
[page:Float near] — جميع النتائج المرتجعة أبعد من قريب. قريب
لا يمكن أن يكون سلبيًا. القيمة الافتراضية هي 0.
[page:Float far] — جميع النتائج المرتجعة أقرب من بعيد. بعيد لا يمكن
أقل من قريب. القيمة الافتراضية هي Infinity.
هذا يخلق كائن raycaster جديد.
عامل بعيد للraycaster. هذه القيمة تشير إلى الكائنات التي يمكن تجاهلها بناءً على المسافة. هذه القيمة لا يجب أن تكون سلبية و يجب أن تكون أكبر من خاصية قريب.
عامل قريب للraycaster. هذه القيمة تشير إلى الكائنات التي يمكن تجاهلها بناءً على المسافة. هذه القيمة لا يجب أن تكون سلبية و يجب أن تكون أصغر من خاصية بعيد.
الكاميرا المستخدمة عند التصوير بالأشعة ضد كائنات تعتمد على المشهد مثل كائنات billboarded مثل [page:Sprites]. يمكن تعيين هذا الحقل يدويًا أو يتم تعيينه عند استدعاء "setFromCamera". افتراضات إلى null.
يستخدم من قبل [name] لتجاهل كائنات 3D بشكل اختياري عند إجراء
اختبارات التقاطع. يضمن المثال التالي للكود أن كائنات 3D فقط على طبقة `1` ستحظى باحترام من قِبَل المثيل من [name].
raycaster.layers.set( 1 );
object.layers.enable( 1 );
كائن به الخصائص التالية:
{
Mesh: {},
Line: { threshold: 1 },
LOD: {},
Points: { threshold: 1 },
Sprite: {}
}
حيث threshold هو دقة raycaster عند التقاط
كائنات، في وحدات العالم.
ال[Page:Ray] المستخدم للتصوير بالأشعة.
[page:Vector3 origin] — متجه المنشأ الذي يلقي منه الشعاع.
[page:Vector3 direction] — متجه الاتجاه المعتدل الذي يعطي
اتجاه للشعاع.
يحدث الشعاع بمنشأ واتجاه جديد. يرجى ملاحظة أن هذا الطريقة تنسخ فقط القيم من الوسائط.
[page:Vector2 coords] — إحداثيات 2D للماوس، في تعديل جهاز
إحداثيات (NDC) --- يجب أن تكون مكونات X و Y بين -1 و 1.
[page:Camera camera] — الكاميرا التي يجب أن ينبثق منها الشعاع
يحدث الشعاع بمنشأ واتجاه جديد.
[page:WebXRController controller] — The controller to copy the position and direction from.
Updates the ray with a new origin and direction.
[page:Object3D object] — الكائن للتحقق من التقاطع مع
شعاع.
[page:Boolean recursive] — إذا كان صحيحًا، فإنه يتحقق أيضًا من جميع الأجداد.
وإلا فإنه يتحقق فقط من التقاطع مع الكائن. الافتراضي صحيح.
[page:Array optionalTarget] — (اختياري) هدف لتعيين النتيجة.
وإلا تم تجسيد جديد لـ [page:Array]. إذا تم تعيينه، يجب عليك مسح هذا
array قبل كل استدعاء (أي ، array.length = 0;).
يتحقق من جميع التقاطع بين الشعاع والكائن مع أو بدون نسل. يتم إرجاع التقاطعات مرتبة حسب المسافة، أولًا أولًا. يتم إرجاع مصفوفة من التقاطعات ...
[ { distance, point, face, faceIndex, object }, ... ]
[page:Float distance] – المسافة بين مصدر الشعاع و
التقاطع
[page:Vector3 point] – نقطة التقاطع، في إحداثيات العالم
[page:Object face] – وجه التقاطع
[page:Integer faceIndex] – فهرس الوجه المتقاطع
[page:Object3D object] – الكائن المتقاطع
[page:Vector2 uv] - إحداثيات U,V في نقطة التقاطع
[page:Vector2 uv1] - مجموعة ثانية من إحداثيات U,V في نقطة
التقاطع
[page:Vector3 normal] - متجه عادي متداخل في نقطة
التقاطع
[page:Integer instanceId] – رقم فهرس الحالة حيث يتقاطع الشعاع
يتقاطع InstancedMesh
`Raycaster` يفوض إلى [page:Object3D.raycast raycast] طريقة كائن مار، عند تقييم ما إذا كان الشعاع يتقاطع مع الكائن أم لا ليس. هذا يسمح لـ [page:Mesh meshes] بالرد بشكل مختلف على تصوير الأشعة من [page:Line lines] و [page:Points pointclouds].
*ملاحظة* أنه بالنسبة للشبكات، يجب أن تكون الوجوه موجهة نحو مصدر [page:.ray ray] من أجل اكتشافها؛ تقاطعات الشعاع المارة من خلال الجزء الخلفي من وجه لن يتم اكتشافه. للتصوير بالأشعة ضد كلا وجوه كائن، سترغب في تعيين خصائص [page:Mesh.material material] [page:Material.side side] إلى `THREE.DoubleSide`.
[page:Array objects] — الكائنات للتحقق من التقاطع مع
شعاع.
[page:Boolean recursive] — إذا كان صحيحًا، فإنه يتحقق أيضًا من جميع نسل
كائنات. وإلا فإنه يتحقق فقط من التقاطع مع الكائنات. افتراضي
صحيح.
[page:Array optionalTarget] — (اختياري) هدف لتعيين النتيجة.
وإلا تم تجسيد جديد لـ [page:Array]. إذا تم تعيينه، يجب عليك مسح هذا
array قبل كل استدعاء (أي ، array.length = 0;).
يتحقق من جميع التقاطع بين الشعاع والكائنات مع أو بدون نسل. يتم إرجاع التقاطعات مرتبة حسب المسافة، أولًا أولًا. التقاطات هي من نفس الشكل كما تلك المرتجعة بواسطة [page:.intersectObject].
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]