# [name]

تم تصميم هذه الفئة للمساعدة في [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);`

## أمثلة (Examples)

[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]

## المنشئ (Constructor)

### [name]( [param:Vector3 origin], [param:Vector3 direction], [param:Float near], [param:Float far] )

[page:Vector3 origin] — متجه المنشأ الذي يلقي منه الشعاع.
[page:Vector3 direction] — متجه الاتجاه الذي يعطي اتجاهًا للشعاع. يجب تعديله.
[page:Float near] — جميع النتائج المرتجعة أبعد من قريب. قريب لا يمكن أن يكون سلبيًا. القيمة الافتراضية هي 0.
[page:Float far] — جميع النتائج المرتجعة أقرب من بعيد. بعيد لا يمكن أقل من قريب. القيمة الافتراضية هي Infinity.

هذا يخلق كائن raycaster جديد.

## الخصائص (Properties)

### [property:Float far]

عامل بعيد للraycaster. هذه القيمة تشير إلى الكائنات التي يمكن تجاهلها بناءً على المسافة. هذه القيمة لا يجب أن تكون سلبية و يجب أن تكون أكبر من خاصية قريب.

### [property:Float near]

عامل قريب للraycaster. هذه القيمة تشير إلى الكائنات التي يمكن تجاهلها بناءً على المسافة. هذه القيمة لا يجب أن تكون سلبية و يجب أن تكون أصغر من خاصية بعيد.

### [property:Camera camera]

الكاميرا المستخدمة عند التصوير بالأشعة ضد كائنات تعتمد على المشهد مثل كائنات billboarded مثل [page:Sprites]. يمكن تعيين هذا الحقل يدويًا أو يتم تعيينه عند استدعاء "setFromCamera". افتراضات إلى null.

### [property:Layers layers]

يستخدم من قبل [name] لتجاهل كائنات 3D بشكل اختياري عند إجراء اختبارات التقاطع. يضمن المثال التالي للكود أن كائنات 3D فقط على طبقة `1` ستحظى باحترام من قِبَل المثيل من [name]. `raycaster.layers.set( 1 ); object.layers.enable( 1 );`

### [property:Object params]

كائن به الخصائص التالية: `{ Mesh: {}, Line: { threshold: 1 }, LOD: {}, Points: { threshold: 1 }, Sprite: {} }` حيث threshold هو دقة raycaster عند التقاط كائنات، في وحدات العالم.

### [property:Ray ray]

ال[Page:Ray] المستخدم للتصوير بالأشعة.

## الوظائف (Methods)

### [method:undefined set]( [param:Vector3 origin], [param:Vector3 direction])

[page:Vector3 origin] — متجه المنشأ الذي يلقي منه الشعاع.
[page:Vector3 direction] — متجه الاتجاه المعتدل الذي يعطي اتجاه للشعاع.

يحدث الشعاع بمنشأ واتجاه جديد. يرجى ملاحظة أن هذا الطريقة تنسخ فقط القيم من الوسائط.

### [method:undefined setFromCamera]( [param:Vector2 coords], [param:Camera camera] )

[page:Vector2 coords] — إحداثيات 2D للماوس، في تعديل جهاز إحداثيات (NDC) --- يجب أن تكون مكونات X و Y بين -1 و 1.
[page:Camera camera] — الكاميرا التي يجب أن ينبثق منها الشعاع

يحدث الشعاع بمنشأ واتجاه جديد.

### [method:Array intersectObject]( [param:Object3D object], [param:Boolean recursive], [param:Array optionalTarget] )

[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`.

### [method:Array intersectObjects]( [param:Array objects], [param:Boolean recursive], [param:Array optionalTarget] )

[page:Array objects] — الكائنات للتحقق من التقاطع مع شعاع.
[page:Boolean recursive] — إذا كان صحيحًا، فإنه يتحقق أيضًا من جميع نسل كائنات. وإلا فإنه يتحقق فقط من التقاطع مع الكائنات. افتراضي صحيح.
[page:Array optionalTarget] — (اختياري) هدف لتعيين النتيجة. وإلا تم تجسيد جديد لـ [page:Array]. إذا تم تعيينه، يجب عليك مسح هذا array قبل كل استدعاء (أي ، array.length = 0;).

يتحقق من جميع التقاطع بين الشعاع والكائنات مع أو بدون نسل. يتم إرجاع التقاطعات مرتبة حسب المسافة، أولًا أولًا. التقاطات هي من نفس الشكل كما تلك المرتجعة بواسطة [page:.intersectObject].

## المصدر (Source)

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]