# [name]

تمثيل شبكة ، خط ، أو هندسة نقطية. يتضمن مواقع الرأس ، ومؤشرات الوجه ، والمعايير ، والألوان ، والأشعة فوق البنفسجية ، والسمات المخصصة داخل المخازن المؤقتة ، مما يقلل من تكلفة تمرير كل هذه البيانات إلى وحدة معالجة الرسومات.

لقراءة وتحرير البيانات في سمات BufferGeometry ، راجع [page:BufferAttribute] التوثيق.

## مثال للكود

`const geometry = new THREE.BufferGeometry(); // إنشاء شكل مربع بسيط. نحن نكرر الأعلى الأيسر والأسفل الأيمن // الرؤوس لأن كل رأس يحتاج إلى الظهور مرة واحدة لكل مثلث. const vertices = new Float32Array( [ -1.0, -1.0, 1.0, // v0 1.0, -1.0, 1.0, // v1 1.0, 1.0, 1.0, // v2 1.0, 1.0, 1.0, // v3 -1.0, 1.0, 1.0, // v4 -1.0, -1.0, 1.0 // v5 ] ); // itemSize = 3 لأنه يوجد 3 قيم (مكونات) لكل رأس geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } ); const mesh = new THREE.Mesh( geometry, material );`

## مثال للكود (Index)

`const geometry = new THREE.BufferGeometry(); const vertices = new Float32Array( [ -1.0, -1.0, 1.0, // v0 1.0, -1.0, 1.0, // v1 1.0, 1.0, 1.0, // v2 -1.0, 1.0, 1.0, // v3 ] ); const indices = [ 0, 1, 2, 2, 3, 0, ]; geometry.setIndex( indices ); geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } ); const mesh = new THREE.Mesh( geometry, material );`

## أمثلة (Examples)

[example:webgl_buffergeometry شبكة بوجوه غير مفهرسة]
[example:webgl_buffergeometry_indexed شبكة بوجوه مفهرسة]
[example:webgl_buffergeometry_lines خطوط]
[example:webgl_buffergeometry_lines_indexed خطوط مفهرسة]
[example:webgl_buffergeometry_custom_attributes_particles جزيئات]
[example:webgl_buffergeometry_rawshader محركات الظل الخام]

## المنشئ (Constructor)

### [name]()

ينشئ هذا [name] جديدًا. كما يضبط العديد من الخصائص على قيمة افتراضية قيمة.

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

### [property:Object attributes]

يحتوي هذا الخريطة القائمة على الهوية على اسم السمة المراد تعيينها وكقيمة [page:BufferAttribute buffer] لتعيينه. بدلاً من الوصول إلى هذا الملكية مباشرة ، استخدم [page:.setAttribute] و [page:.getAttribute] ل الوصول إلى سمات هذه الهندسة.

### [property:Box3 boundingBox]

مربع التحديد لـ bufferGeometry ، والذي يمكن حسابه بـ [page:.computeBoundingBox](). الافتراضي هو `null`.

### [property:Sphere boundingSphere]

كرة التحديد لـ bufferGeometry ، والتي يمكن حسابها بـ [page:.computeBoundingSphere](). الافتراضي هو `null`.

### [property:Object drawRange]

يحدد جزء الهندسة المراد عرضه. يجب عدم تعيين هذا مباشرة ، بدلاً من ذلك استخدم [page:.setDrawRange]. الافتراضي هو `{ start: 0, count: Infinity }` بالنسبة لـ BufferGeometry غير المفهرس ، count هو عدد القمم التي يتم عرضها. بالنسبة لـ BufferGeometry المفهرس ، count هو عدد المؤشرات التي يتم عرضها.

### [property:Array groups]

قسم الهندسة إلى مجموعات ، كل منها سيتم عرضه في مكالمة WebGL رسم منفصلة. هذا يسمح باستخدام مجموعة من المواد مع الهندسة.
كل مجموعة هي كائن من الشكل: `{ start: Integer, count: Integer, materialIndex: Integer }` حيث يحدد start العنصر الأول في هذه المكالمة - الأول رأس للهندسة غير المفهرسة ، وإلا فإن المثلث الأول فهرس. عد يحدد كم عدد القمم (أو المؤشرات) المضمنة ، و materialIndex يحدد فهرس مجموعة المواد للاستخدام.
استخدم [page:.addGroup] لإضافة مجموعات ، بدلاً من تعديل هذا المصفوفة مباشرة.
يجب أن ينتمي كل رأس وفهرس إلى مجموعة واحدة فقط - يجب ألا تشترك المجموعات قمم أو مؤشرات ، ويجب ألا تترك القمم أو المؤشرات غير المستخدمة.

### [property:Integer id]

رقم فريد لهذا الحال bufferGeometry.

### [property:BufferAttribute index]

يتيح إعادة استخدام القمم عبر مثلثات متعددة ؛ هذا هو يسمى باستخدام "المثلثات المفهرسة". يرتبط كل مثلث بـ مؤشرات ثلاث قمم. لذلك تخزن هذه السمة فهرس كل رأس لكل وجه ثلاثي الأضلاع. إذا لم يتم تعيين هذه السمة ، فإن [page:WebGLRenderer renderer] يفترض أن كل ثلاثة مواقع متجاورة تمثل مثلثًا واحدًا. الافتراضي هو `null`.

### [property:Boolean isBufferGeometry]

علامة للقراءة فقط للتحقق مما إذا كان الكائن المحدد من نوع [name].

### [property:Object morphAttributes]

خريطة قائمة على [page:BufferAttribute]s التي تحمل تفاصيل هندسة المورف الأهداف.
ملاحظة: بمجرد عرض الهندسة ، لا يمكن تغيير بيانات سمة المورف يتغير. سيتعين عليك الاتصال [page:.dispose]() ، وإنشاء جديد نسخة من [name].

### [property:Boolean morphTargetsRelative]

يستخدم للتحكم في سلوك هدف المورف ؛ عند تعيينه على true ، المورف يتم التعامل مع بيانات الهدف كإزاحات نسبية ، بدلاً من كـ المواقع / المعايير المطلقة. الافتراضي هو `false`.

### [property:String name]

اسم اختياري لهذه الحالة bufferGeometry. الافتراضي هو فارغ سلسلة.

### [property:Object userData]

كائن يمكن استخدامه لتخزين بيانات مخصصة حول BufferGeometry. يجب ألا يحتوي على مراجع للوظائف حيث لن يتم استنساخها.

### [property:String uuid]

[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] من هذه الحالة كائن. يتم تعيين هذا تلقائيًا ولا يجب أن يكون تحرير.

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

[page:EventDispatcher EventDispatcher] الطرق متوفرة على هذا صف.

### [method:undefined addGroup]([param:Integer start]، [param:Integer count]، [param:Integer materialIndex])

يضيف مجموعة إلى هذه الهندسة ؛ انظر [page:BufferGeometry.groups groups] خاصية للحصول على التفاصيل.

### [method:this applyMatrix4]([param:Matrix4 matrix])

تطبق تحويل المصفوفة على الهندسة.

### [method:this applyQuaternion]([param:Quaternion quaternion])

يطبق التدوير الممثل بالرباعي على الهندسة.

### [method:this center] ()

مركز الهندسة بناءً على مربع التحديد.

### [method:undefined clearGroups]( )

يمسح جميع المجموعات.

### [method:BufferGeometry clone]()

ينشئ نسخة من هذا BufferGeometry.

### [method:undefined computeBoundingBox]()

يحسب مربع التحديد للهندسة ، ويحدث [page:.boundingBox] سمة.
لا يتم حساب مربعات التحديد افتراضيًا. يجب حسابها بشكل صريح حساب ، وإلا كانت `null`.

### [method:undefined computeBoundingSphere]()

يحسب كرة التحديد للهندسة ، ويحدث [page:.boundingSphere] سمة.
لا تتم حساب كرات التحديد افتراضيًا. يجب حسابها بشكل صريح حساب ، وإلا كانت `null`.

### [method:undefined computeTangents]()

يحسب ويضيف سمة مماسية لهذه الهندسة.
الحساب مدعوم فقط للهندسات المفهرسة وإذا تم تعريف الوضعية ، الطبيعية ، والأشعة فوق البنفسجية. عند استخدام خريطة طبيعية للفضاء المماس خريطة ، تفضل خوارزمية MikkTSpace المقدمة من قبل [page:BufferGeometryUtils.computeMikkTSpaceTangents] بدلاً من ذلك.

### [method:undefined computeVertexNormals]()

تحسب قمم الأوجه للبيانات القمية المعطاة. بالنسبة للهندسات المفهرسة ، يضبط الأسلوب كل قمة عادية لتكون متوسط ​​أوجه الوجه التي تشارك هذه القمة. بالنسبة للهندسات غير المفهرسة ، لا تتشارك القمم ، ويضبط الأسلوب كل قمة عادية لتكون نفس وجه الوجه.

### [method:this copy]( [param:BufferGeometry bufferGeometry] )

ينسخ BufferGeometry آخر إلى هذا BufferGeometry.

### [method:BufferAttribute deleteAttribute]( [param:String name] )

تحذف [page:BufferAttribute attribute] بالاسم المحدد.

### [method:undefined dispose]()

يطلق الموارد المتعلقة بوحدة معالجة الرسومات التي تم تخصيصها من قبل هذا المثيل. اتصل بهذا الأسلوب كلما لم يعد هذا المثيل مستخدمًا في تطبيقك.

### [method:BufferAttribute getAttribute]( [param:String name] )

يرجع [page:BufferAttribute attribute] بالاسم المحدد.

### [method:BufferAttribute getIndex] ()

يرجع [page:.index] buffer.

### [method:Boolean hasAttribute]( [param:String name] )

يعود `true` إذا كانت السمة بالاسم المحدد موجودة.

### [method:this lookAt] ( [param:Vector3 vector] )

vector - نقطة عالمية للنظر إليها.
يدور الهندسة لمواجهة نقطة في الفضاء. يتم هذا عادةً كـ عملية واحدة ، وليس أثناء حلقة. استخدم [page:Object3D.lookAt] لـ الاستخدام النموذجي للشبكة في الوقت الفعلي.

### [method:undefined normalizeNormals]()

سيكون كل متجه طبيعي في هندسة بقوة 1. هذا سوف تصحح الإضاءة على سطوح الهندسة.

### [method:this rotateX] ( [param:Float radians] )

قم بتدوير الهندسة حول المحور X. يتم هذا عادةً كعملية واحدة عملية ، وليس أثناء حلقة. استخدم [page:Object3D.rotation] لـ تدوير شبكة نموذجية في الوقت الفعلي.

### [method:this rotateY] ( [param:Float radians] )

قم بتدوير الهندسة حول المحور Y. يتم هذا عادةً كعملية واحدة عملية ، وليس أثناء حلقة. استخدم [page:Object3D.rotation] لـ تدوير شبكة نموذجية في الوقت الفعلي.

### [method:this rotateZ] ( [param:Float radians] )

قم بتدوير الهندسة حول المحور Z. يتم هذا عادةً كعملية واحدة عملية ، وليس أثناء حلقة. استخدم [page:Object3D.rotation] لـ تدوير شبكة نموذجية في الوقت الفعلي.

### [method:this scale] ( [param:Float x], [param:Float y], [param:Float z] )

قم بتغيير حجم بيانات الهندسة. يتم هذا عادةً كعملية واحدة ، وليس أثناء حلقة. استخدام [page:Object3D.scale] لـ تغيير حجم شبكات نموذجية في الوقت الفعلي.

### [method:this setAttribute]( [param:String name], [param:BufferAttribute attribute] )

يضع سمة لهذه الهندسة. استخدام هذا بدلاً من خصائص الملكية ، لأن خريطة قائمة داخلية من [page:.attributes] يتم صيانته لتسريع التكرار على السمات.

### [method:undefined setDrawRange] ( [param:Integer start], [param:Integer count] )

قم بتعيين خاصية [page:.drawRange]. بالنسبة لـ BufferGeometry غير المفهرس ، count هو عدد القمم التي يتم عرضها. بالنسبة لـ BufferGeometry المفهرس ، count هو عدد المؤشرات التي يتم عرضها.

### [method:this setFromPoints] ( [param:Array points] )

تضبط سمات هذا BufferGeometry من مصفوفة من النقاط.

### [method:this setIndex] ( [param:BufferAttribute index] )

ضبط buffer [page:.index].

### [method:Object toJSON]()

قُم بتحويل هندسة buffer إلى three.js [link:https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 JSON Object/Scene format].

### [method:BufferGeometry toNonIndexed]()

إرجاع إصدار غير مفهرس من BufferGeometry المفهرس.

### [method:this translate] ( [param:Float x], [param:Float y], [param:Float z] )

قُم بترجمة الهندسة. يتم هذا عادةً كعملية واحدة ، وليس أثناء حلقة. استخدم [page:Object3D.position] لـ ترجمة شبكات نموذجية في الوقت الفعلي.

## المصدر (Source)

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