سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش WebGL همراهتون هستیم. در قسمت های قبلی در مورد انواع شیدر ها صحبت شد .در این قسمت به ارتباط Attributes و بافر Objects در WebGL می پردازیم. همچنین فعال کردن Attribute در WebGL رو خواهیم داشت.
هر attribute در برنامه شیدر vertex به یک شیء بافر vertex اشاره می کند. پس از ایجاد اشیاء بافر حقیقی، برنامه نویسان باید آنها را با attributes های برنامه شیدر vertex مرتبط سازند. هر attribute به تنهایی به یک vertex buffer object اشاره دارد که از آن ها مقدار داده ها را استخراج می کند و سپس این attribute ها به برنامه شیدر منتقل می شوند.
برای مرتبط سازی Objects Buffer Vertex با Attributes های برنامه شیدر vertex باید مراحل زیر را دنبال کنید.
۱. موقعیت attribute را دریافت کنید
۲. attribute را به یک شیء بافر vertex اختصاص دهید.
۳. attribute را فعال کنید.
WebGL یک روش به نام getAttribLocation رافراهم می کند که موقعیت صحیح را باز می گرداند. vوش آن به شرح زیر است .
1 | ulong getAttribLocation(Object program, string name) |
این روش ورتکس شیدر program object و مقادیر attribute از برنامه شیدر vertex را می پذیرد.
قطعه کد زیر نشان می دهد که چگونه از این روش استفاده کنید.
1 | var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates"); |
در این جا، shader_program آبجکت برنامه شیدر است و coordinates هست attribute برای شیدر hader program است.
مشخصه را به یک VBO مشخص کنید
برای اختصاص متغیر به ویژگی متغیر، WebGL یک روش به نام ()vertexAttribPointer فراهم می کند. در اینجا نحوه این روش وجود دارد .
1 | void vertexAttribPointer(location, int size, enum type, bool normalized, long stride, long offset) |
این روش شش پارامتر را قبول می کند و در زیر بحث می شود.
Location – این مکان ذخیره سازی یک متغیر attribute را مشخص می کند. بر اساس این گزینه، شما باید مقدار برگشت داده شده توسط روش () getAttribLocation را منتقل کنید.
Size – تعداد کامپوننت هر vertex در بافر object را مشخص می کند.
Type – این نوع داده را مشخص می کند.
Normalized – این مقدار بولین است. اگر درست باشد، داده های غیر شناور به [۰، ۱] نرمالیزه می شود؛ در غیر این صورت آن به [-۱، ۱] نرمالیزه می شود.
Stride – این تعداد بایت ها را بین عناصر داده های مختلف vertex مشخص می کند یا صفر برای پیش فرض پیش فرض.
Offset – این مشخص می کند Offset (در بایت ها) در یک بافر object که نشان می دهد که بایت داده vertex ذخیره شده است. اگر داده از ابتدا ذخیره شده باشد، مقدار offset برابر ۰ است.
قطعه زیر نشان می دهد که چگونه از ()vertexAttribPointer در یک برنامه استفاده کنید .
1 | gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0); |
برای دسترسی به بافر object در یک شیدر vertex ، باید vertex shader attribute را فعال کنید. برای این عملیات، WebGL روش ()enableVertexAttribArray را فراهم می کند. این روش موقعیت attribute را به عنوان یک پارامتر پذیرفته است. در این جا چگونگی استفاده از این روش در یک برنامه را داریم.
1 | gl.enableVertexAttribArray(coordinatesVar); |
اینم از مسائل مربوط به ارتباط Attributes و بافر Objects در WebGL و فعال کردن Attribute در WebGL .در ادامه مجموعه اموزشی WebGL اطلاعات بیش تری در اختیارتون قرار خواهیم داد.ممنون از همراهیتون.