Raycaster.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <!DOCTYPE html>
  2. <html lang="ar">
  3. <head>
  4. <meta charset="utf-8" />
  5. <base href="../../../" />
  6. <script src="page.js"></script>
  7. <link type="text/css" rel="stylesheet" href="page.css" />
  8. </head>
  9. <body class="rtl">
  10. <h1>[name]</h1>
  11. <p class="desc">
  12. تم تصميم هذه الفئة للمساعدة في
  13. [link:https://en.wikipedia.org/wiki/Ray_casting raycasting]. يتم استخدام Raycasting
  14. لاختيار الماوس (العمل على معرفة الكائنات في المساحة ثلاثية الأبعاد التي يكون عليها الماوس
  15. فوق) من بين أشياء أخرى.
  16. </p>
  17. <h2>مثال الكود</h2>
  18. <code>
  19. const raycaster = new THREE.Raycaster();
  20. const pointer = new THREE.Vector2();
  21. function onPointerMove( event ) {
  22. // حساب موضع المؤشر في إحداثيات الجهاز المعتدلة
  23. // (-1 إلى +1) لكلا المكونين
  24. pointer.x = ( event.clientX / window.innerWidth ) * 2 - 1;
  25. pointer.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
  26. }
  27. function render() {
  28. // تحديث شعاع التقاط مع الكاميرا وموضع المؤشر
  29. raycaster.setFromCamera( pointer, camera );
  30. // حساب الكائنات المتقاطعة مع شعاع التقاط
  31. const intersects = raycaster.intersectObjects( scene.children );
  32. for ( let i = 0; i < intersects.length; i ++ ) {
  33. intersects[ i ].object.material.color.set( 0xff0000 );
  34. }
  35. renderer.render( scene, camera );
  36. }
  37. window.addEventListener( 'pointermove', onPointerMove );
  38. window.requestAnimationFrame(render);
  39. </code>
  40. <h2>أمثلة (Examples)</h2>
  41. <p>
  42. [example:webgl_interactive_cubes Raycasting to a Mesh]<br />
  43. [example:webgl_interactive_cubes_ortho Raycasting to a Mesh in using an OrthographicCamera]<br />
  44. [example:webgl_interactive_buffergeometry Raycasting to a Mesh with BufferGeometry]<br />
  45. [example:webgl_instancing_raycast Raycasting to a InstancedMesh]<br />
  46. [example:webgl_interactive_lines Raycasting to a Line]<br />
  47. [example:webgl_interactive_raycasting_points Raycasting to Points]<br />
  48. [example:webgl_geometry_terrain_raycast Terrain raycasting]<br />
  49. [example:webgl_interactive_voxelpainter Raycasting to paint voxels]<br />
  50. [example:webgl_raycaster_texture Raycast to a Texture]
  51. </p>
  52. <h2>المنشئ (Constructor)</h2>
  53. <h3>[name]( [param:Vector3 origin], [param:Vector3 direction], [param:Float near], [param:Float far] )</h3>
  54. <p>
  55. [page:Vector3 origin] — متجه المنشأ الذي يلقي منه الشعاع.<br />
  56. [page:Vector3 direction] — متجه الاتجاه الذي يعطي اتجاهًا
  57. للشعاع. يجب تعديله.<br />
  58. [page:Float near] — جميع النتائج المرتجعة أبعد من قريب. قريب
  59. لا يمكن أن يكون سلبيًا. القيمة الافتراضية هي 0.<br />
  60. [page:Float far] — جميع النتائج المرتجعة أقرب من بعيد. بعيد لا يمكن
  61. أقل من قريب. القيمة الافتراضية هي Infinity.
  62. </p>
  63. <p>هذا يخلق كائن raycaster جديد.<br /></p>
  64. <h2>الخصائص (Properties)</h2>
  65. <h3>[property:Float far]</h3>
  66. <p>
  67. عامل بعيد للraycaster. هذه القيمة تشير إلى الكائنات التي يمكن
  68. تجاهلها بناءً على المسافة. هذه القيمة لا يجب أن تكون سلبية و
  69. يجب أن تكون أكبر من خاصية قريب.
  70. </p>
  71. <h3>[property:Float near]</h3>
  72. <p>
  73. عامل قريب للraycaster. هذه القيمة تشير إلى الكائنات التي يمكن
  74. تجاهلها بناءً على المسافة. هذه القيمة لا يجب أن تكون سلبية و
  75. يجب أن تكون أصغر من خاصية بعيد.
  76. </p>
  77. <h3>[property:Camera camera]</h3>
  78. <p>
  79. الكاميرا المستخدمة عند التصوير بالأشعة ضد كائنات تعتمد على المشهد مثل
  80. كائنات billboarded مثل [page:Sprites]. يمكن تعيين هذا الحقل يدويًا أو
  81. يتم تعيينه عند استدعاء "setFromCamera". افتراضات إلى null.
  82. </p>
  83. <h3>[property:Layers layers]</h3>
  84. <p>
  85. يستخدم من قبل [name] لتجاهل كائنات 3D بشكل اختياري عند إجراء
  86. اختبارات التقاطع. يضمن المثال التالي للكود أن كائنات 3D فقط على طبقة `1` ستحظى باحترام من قِبَل المثيل من [name].
  87. <code>
  88. raycaster.layers.set( 1 );
  89. object.layers.enable( 1 );
  90. </code>
  91. </p>
  92. <h3>[property:Object params]</h3>
  93. <p>
  94. كائن به الخصائص التالية:
  95. <code>
  96. {
  97. Mesh: {},
  98. Line: { threshold: 1 },
  99. LOD: {},
  100. Points: { threshold: 1 },
  101. Sprite: {}
  102. }
  103. </code>
  104. حيث threshold هو دقة raycaster عند التقاط
  105. كائنات، في وحدات العالم.
  106. </p>
  107. <h3>[property:Ray ray]</h3>
  108. <p>ال[Page:Ray] المستخدم للتصوير بالأشعة.</p>
  109. <h2>الوظائف (Methods)</h2>
  110. <h3>[method:undefined set]( [param:Vector3 origin], [param:Vector3 direction])</h3>
  111. <p>
  112. [page:Vector3 origin] — متجه المنشأ الذي يلقي منه الشعاع.<br />
  113. [page:Vector3 direction] — متجه الاتجاه المعتدل الذي يعطي
  114. اتجاه للشعاع.
  115. </p>
  116. <p>
  117. يحدث الشعاع بمنشأ واتجاه جديد. يرجى ملاحظة أن هذا
  118. الطريقة تنسخ فقط القيم من الوسائط.
  119. </p>
  120. <h3>[method:undefined setFromCamera]( [param:Vector2 coords], [param:Camera camera] )</h3>
  121. <p>
  122. [page:Vector2 coords] — إحداثيات 2D للماوس، في تعديل جهاز
  123. إحداثيات (NDC) --- يجب أن تكون مكونات X و Y بين -1 و 1.<br />
  124. [page:Camera camera] — الكاميرا التي يجب أن ينبثق منها الشعاع
  125. </p>
  126. <p>يحدث الشعاع بمنشأ واتجاه جديد.</p>
  127. <h3>[method:this setFromXRController]( [param:WebXRController controller] )</h3>
  128. <p>
  129. [page:WebXRController controller] — The controller to copy the position and direction from.
  130. </p>
  131. <p>Updates the ray with a new origin and direction.</p>
  132. <h3>[method:Array intersectObject]( [param:Object3D object], [param:Boolean recursive], [param:Array optionalTarget] )</h3>
  133. <p>
  134. [page:Object3D object] — الكائن للتحقق من التقاطع مع
  135. شعاع.<br />
  136. [page:Boolean recursive] — إذا كان صحيحًا، فإنه يتحقق أيضًا من جميع الأجداد.
  137. وإلا فإنه يتحقق فقط من التقاطع مع الكائن. الافتراضي صحيح.<br />
  138. [page:Array optionalTarget] — (اختياري) هدف لتعيين النتيجة.
  139. وإلا تم تجسيد جديد لـ [page:Array]. إذا تم تعيينه، يجب عليك مسح هذا
  140. array قبل كل استدعاء (أي ، array.length = 0;).
  141. </p>
  142. <p>
  143. يتحقق من جميع التقاطع بين الشعاع والكائن مع أو بدون
  144. نسل. يتم إرجاع التقاطعات مرتبة حسب المسافة، أولًا أولًا.
  145. يتم إرجاع مصفوفة من التقاطعات ...
  146. </p>
  147. <code> [ { distance, point, face, faceIndex, object }, ... ] </code>
  148. <p>
  149. [page:Float distance] – المسافة بين مصدر الشعاع و
  150. التقاطع<br />
  151. [page:Vector3 point] – نقطة التقاطع، في إحداثيات العالم<br />
  152. [page:Object face] – وجه التقاطع<br />
  153. [page:Integer faceIndex] – فهرس الوجه المتقاطع<br />
  154. [page:Object3D object] – الكائن المتقاطع<br />
  155. [page:Vector2 uv] - إحداثيات U,V في نقطة التقاطع<br />
  156. [page:Vector2 uv1] - مجموعة ثانية من إحداثيات U,V في نقطة
  157. التقاطع<br />
  158. [page:Vector3 normal] - متجه عادي متداخل في نقطة
  159. التقاطع<br />
  160. [page:Integer instanceId] – رقم فهرس الحالة حيث يتقاطع الشعاع
  161. يتقاطع InstancedMesh
  162. </p>
  163. <p>
  164. `Raycaster` يفوض إلى [page:Object3D.raycast raycast] طريقة
  165. كائن مار، عند تقييم ما إذا كان الشعاع يتقاطع مع الكائن أم لا
  166. ليس. هذا يسمح لـ [page:Mesh meshes] بالرد بشكل مختلف على تصوير الأشعة
  167. من [page:Line lines] و [page:Points pointclouds].
  168. </p>
  169. <p>
  170. *ملاحظة* أنه بالنسبة للشبكات، يجب أن تكون الوجوه موجهة نحو مصدر
  171. [page:.ray ray] من أجل اكتشافها؛ تقاطعات الشعاع المارة
  172. من خلال الجزء الخلفي من وجه لن يتم اكتشافه. للتصوير بالأشعة ضد كلا
  173. وجوه كائن، سترغب في تعيين خصائص [page:Mesh.material material]
  174. [page:Material.side side] إلى `THREE.DoubleSide`.
  175. </p>
  176. <h3>[method:Array intersectObjects]( [param:Array objects], [param:Boolean recursive], [param:Array optionalTarget] )</h3>
  177. <p>
  178. [page:Array objects] — الكائنات للتحقق من التقاطع مع
  179. شعاع.<br />
  180. [page:Boolean recursive] — إذا كان صحيحًا، فإنه يتحقق أيضًا من جميع نسل
  181. كائنات. وإلا فإنه يتحقق فقط من التقاطع مع الكائنات. افتراضي
  182. صحيح.<br />
  183. [page:Array optionalTarget] — (اختياري) هدف لتعيين النتيجة.
  184. وإلا تم تجسيد جديد لـ [page:Array]. إذا تم تعيينه، يجب عليك مسح هذا
  185. array قبل كل استدعاء (أي ، array.length = 0;).
  186. </p>
  187. <p>
  188. يتحقق من جميع التقاطع بين الشعاع والكائنات مع أو بدون
  189. نسل. يتم إرجاع التقاطعات مرتبة حسب المسافة، أولًا أولًا. التقاطات هي من نفس الشكل كما تلك المرتجعة بواسطة
  190. [page:.intersectObject].
  191. </p>
  192. <h2>المصدر (Source)</h2>
  193. <p>
  194. [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
  195. </p>
  196. </body>
  197. </html>