نمای کلی
این توابع به شما امکان می دهند ماتریس های مربعی با رتبه های 2x2، 3x3 و 4x4 را دستکاری کنید. آنها به ویژه برای تبدیل های گرافیکی مفید هستند و با OpenGL سازگار هستند.
ما از یک شاخص مبتنی بر صفر برای سطرها و ستون ها استفاده می کنیم. به عنوان مثال آخرین عنصر یک rs_matrix4x4 در (3، 3) یافت می شود.
RenderScript از ماتریس های ستون اصلی و بردارهای مبتنی بر ستون استفاده می کند. تبدیل یک بردار با پس ضرب بردار انجام می شود، به عنوان مثال (matrix * vector)
، همانطور که توسط rsMatrixMultiply () ارائه شده است.
برای ایجاد یک ماتریس تبدیل که دو تبدیل را همزمان انجام می دهد، دو ماتریس منبع را ضرب کنید و اولین تبدیل به عنوان آرگومان مناسب است. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید. این از s2 * (s1 * v)
گرفته شده است که (s2 * s1) * v
است.
ما دو سبک توابع برای ایجاد ماتریس های تبدیل داریم: rsMatrixLoad Transformation و rsMatrix Transformation . سبک قبلی به سادگی ماتریس تبدیل را در آرگومان اول ذخیره می کند. دومی یک ماتریس تبدیل از قبل موجود را اصلاح می کند تا تبدیل جدید ابتدا اتفاق بیفتد. به عنوان مثال، اگر rsMatrixTranslate () را روی ماتریسی که قبلاً مقیاسبندی را انجام میدهد، فراخوانی کنید، ماتریس بهدستآمده وقتی روی یک بردار اعمال میشود، ابتدا ترجمه را انجام میدهد و سپس مقیاسگذاری را انجام میدهد.
خلاصه
توابع | |
---|---|
rsExtractFrustum Planes | صفحات فروستوم را محاسبه کنید |
rsIsSphereInFrustum | بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر |
rsMatrixGet | یک عنصر را دریافت کنید |
rsMatrixInverse | یک ماتریس را در جای خود معکوس می کند |
rsMatrixInverseTranspose | یک ماتریس را در جای خود معکوس و جابجا می کند |
rsMatrixLoad | یک ماتریس را بارگیری یا کپی کنید |
rsMatrixLoadFrustum | یک ماتریس طرح ریزی فروستوم را بارگذاری کنید |
rsMatrixLoadIdentity | بارگذاری ماتریس هویت |
rsMatrixLoadMultiply | دو ماتریس را ضرب کنید |
rsMatrixLoadOrtho | بارگذاری یک ماتریس طرح ریزی املایی |
rsMatrixLoadPerspective | بارگذاری یک ماتریس طرح ریزی پرسپکتیو |
rsMatrixLoadRotate | یک ماتریس چرخشی بارگذاری کنید |
rsMatrixLoadScale | یک ماتریس مقیاس بندی را بارگذاری کنید |
rsMatrixLoadTranslate | ماتریس ترجمه را بارگیری کنید |
rsMatrixMultiply | یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید |
rsMatrixRotate | یک چرخش را به یک ماتریس تبدیل اعمال کنید |
rsMatrixScale | یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید |
rsMatrixSet | یک عنصر را تنظیم کنید |
rsMatrixTranslate | یک ترجمه را به یک ماتریس تبدیل اعمال کنید |
rsMatrixTranspose | جابجایی یک مکان ماتریسی |
توابع
rsExtractFrustumPlanes : صفحات فروستوم را محاسبه کنید
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | در سطح 24 API اضافه شد |
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | از سطح API 24 و بالاتر حذف شد |
پارامترها
viewProj | ماتریسی برای استخراج هواپیماها از. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
درست است |
6 صفحه فروستوم را از ماتریس طرح ریزی نمای محاسبه می کند
rsIsSphereInFrustum : بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر
bool rsIsSphereInFrustum( float4 * کره، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); |
پارامترها
کره | float4 نمایانگر کره است. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
اگر کره در 6 صفحه فروستوم قرار داشته باشد، مقدار true را برمیگرداند.
rsMatrixGet : یک عنصر را دریافت کنید
float rsMatrixGet(const rs_matrix2x2 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix3x3 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix4x4 * m, uint32_t col, uint32_t row); |
پارامترها
متر | ماتریس برای استخراج عنصر از. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید استخراج شود. |
ردیف | ردیف صفر عنصری که باید استخراج شود. |
یک عنصر از یک ماتریس را برمی گرداند.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixInverse : یک ماتریس را در جای خود معکوس می کند
bool rsMatrixInverse( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای معکوس کردن. |
---|
اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixInverseTranspose : یک ماتریس را در جای خود معکوس و جابجا می کند
bool rsMatrixInverseTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای اصلاح |
---|
ماتریس ابتدا معکوس شده و سپس انتقال داده می شود. اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixLoad : یک ماتریس را بارگیری یا کپی کنید
void rsMatrixLoad( rs_matrix2x2 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix2x2 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix4x4 * source); |
پارامترها
مقصد | ماتریس برای تنظیم. |
---|---|
آرایه | آرایه ای از مقادیر برای تنظیم ماتریس. این آرایه ها بسته به اندازه ماتریس باید 4، 9 یا 16 شناور طول داشته باشند. |
منبع | ماتریس منبع |
عناصر یک ماتریس را از آرایه ای از شناورها یا از ماتریس دیگری تنظیم کنید.
اگر از یک آرایه بارگذاری می شود، شناورها باید به ترتیب ردیف اصلی باشند، یعنی عنصر یک row 0, column 0
باید ابتدا باشد، سپس عنصر در row 0, column 1
و غیره قرار گیرد.
اگر بارگیری از یک ماتریس و منبع کوچکتر از مقصد باشد، بقیه مقصد با عناصر ماتریس هویت پر می شود. به عنوان مثال، بارگذاری یک rs_matrix2x2 در یک rs_matrix4x4 باعث می شود:
m00 | m01 | 0.0 | 0.0 |
m10 | m11 | 0.0 | 0.0 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
rsMatrixLoadFrustum : یک ماتریس طرح ریزی فروستوم را بارگذاری کنید
void rsMatrixLoadFrustum( rs_matrix4x4 * m، شناور چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی فروستوم میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
را تغییر میدهد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadIdentity : ماتریس هویت بار
void rsMatrixLoadIdentity( rs_matrix2x2 * m); | |
void rsMatrixLoadIdentity( rs_matrix3x3 * m); | |
void rsMatrixLoadIdentity( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای تنظیم. |
---|
عناصر یک ماتریس را روی ماتریس هویت قرار دهید.
rsMatrixLoadMultiply : دو ماتریس را ضرب کنید
void rsMatrixLoadMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
lhs | ماتریس سمت چپ محصول |
rhs | ماتریس سمت راست محصول |
m را به حاصل ضرب ماتریس lhs * rhs
تنظیم می کند.
برای ترکیب دو ماتریس تبدیل 4×4، ماتریس تبدیل دوم را در ماتریس تبدیل اول ضرب کنید. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید.
هشدار: قبل از نسخه 21، ذخیره نتیجه در ماتریس سمت راست پشتیبانی نمیشود و منجر به رفتار نامشخص میشود. به جای آن از rsMatrixMulitply استفاده کنید. به عنوان مثال، به جای انجام rsMatrixLoadMultiply (&m2r، &m2r، &m2l)، از rsMatrixMultiply (&m2r، &m2l) استفاده کنید. rsMatrixLoadMultiply (&m2l، &m2r، &m2l) همانطور که انتظار می رود کار می کند.
rsMatrixLoadOrtho : بارگذاری یک ماتریس طرح ریزی املایی
void rsMatrixLoadOrtho( rs_matrix4x4 * m، شناور به چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی املایی میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
را به یک مکعب واحد تبدیل میکند که گوشه آن در (-1, -1, -1)
و نقطه مقابل آن در (1, 1, 1)
است. (1, 1, 1)
.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
به https://en.wikipedia.org/wiki/Orthographic_projection مراجعه کنید.
rsMatrixLoadPerspective : بارگذاری یک ماتریس طرح ریزی پرسپکتیو
void rsMatrixLoadPerspective( rs_matrix4x4 * m, float fovy, float aspect, float near, float far); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
فووی | میدان دید، بر حسب درجه در امتداد محور Y. |
جنبه | نسبت x / y. |
نزدیک | نزدیک هواپیمای بریده. |
دور | هواپیمای دور برش. |
با فرض یک میدان دید متقارن، یک ماتریس طرح ریزی پرسپکتیو می سازد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadRotate : بارگذاری یک ماتریس چرخشی
void rsMatrixLoadRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
این تابع یک ماتریس چرخشی ایجاد می کند. محور چرخش بردار (x, y, z)
است.
برای چرخاندن یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
https://en.wikipedia.org/wiki/Rotation_matrix را ببینید.
rsMatrixLoadScale : بارگذاری یک ماتریس مقیاسپذیر
void rsMatrixLoadScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
این تابع یک ماتریس مقیاس بندی ایجاد می کند که در آن هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای مقیاس بندی یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadTranslate : بارگذاری یک ماتریس ترجمه
void rsMatrixLoadTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
این تابع یک ماتریس ترجمه ایجاد می کند که در آن یک عدد به هر عنصر یک بردار اضافه می شود.
برای ترجمه یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixMultiply : یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید
float2 rsMatrixMultiply(const rs_matrix2x2 * m, float2 in); | در سطح 14 API اضافه شده است |
float2 rsMatrixMultiply( rs_matrix2x2 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float2 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float3 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float2 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float3 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float4 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float4 in); | از سطح API 14 و بالاتر حذف شد |
void rsMatrixMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * rhs); | |
void rsMatrixMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * rhs); | |
void rsMatrixMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس سمت چپ محصول و ماتریسی که باید تنظیم شود. |
---|---|
rhs | ماتریس سمت راست محصول |
در |
برای نوع ماتریس با ماتریس، m را به محصول ماتریس m * rhs
تنظیم می کند.
هنگام ترکیب دو ماتریس تبدیل 4x4 با استفاده از این تابع، ماتریس حاصل با انجام تبدیل rhs ابتدا و سپس تبدیل m اصلی مطابقت دارد.
برای متغیر ماتریس بردار، پس از ضرب بردار توسط ماتریس را برمی گرداند، یعنی. m * in
.
وقتی یک float3 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (0، 1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix3x3 ضرب می کنیم، بردار با (0) منبسط می شود.
با شروع API 14، این تابع یک ماتریس const را به عنوان اولین آرگومان می گیرد.
rsMatrixRotate : یک چرخش را به یک ماتریس تبدیل اعمال کنید
void rsMatrixRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
ماتریس m را با یک ماتریس چرخشی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک چرخش انجام دهد. محور چرخش بردار (x, y, z)
است.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixScale : یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید
void rsMatrixScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
ماتریس m را با یک ماتریس مقیاس بندی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک مقیاس بندی انجام شود. هنگام مقیاس بندی، هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixSet : یک عنصر را تنظیم کنید
void rsMatrixSet( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v); |
پارامترها
متر | ماتریسی که اصلاح خواهد شد. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید تنظیم شود. |
ردیف | ردیف مبتنی بر صفر عنصری که باید تنظیم شود. |
v | مقدار برای تنظیم |
یک عنصر از یک ماتریس را تنظیم کنید.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixTranslate : یک ترجمه را به یک ماتریس تبدیل اعمال کنید
void rsMatrixTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
ماتریس m را با یک ماتریس ترجمه ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک ترجمه انجام دهد. هنگام ترجمه، یک عدد به هر جزء یک بردار اضافه می شود.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixTranspose : یک مکان ماتریسی را جابجا کنید
void rsMatrixTranspose( rs_matrix2x2 * m); | |
void rsMatrixTranspose( rs_matrix3x3 * m); | |
void rsMatrixTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای انتقال. |
---|
ماتریس m را در جای خود جابجا کنید.
نمای کلی
این توابع به شما امکان می دهند ماتریس های مربعی با رتبه های 2x2، 3x3 و 4x4 را دستکاری کنید. آنها به ویژه برای تبدیل های گرافیکی مفید هستند و با OpenGL سازگار هستند.
ما از یک شاخص مبتنی بر صفر برای سطرها و ستون ها استفاده می کنیم. به عنوان مثال آخرین عنصر یک rs_matrix4x4 در (3، 3) یافت می شود.
RenderScript از ماتریس های ستون اصلی و بردارهای مبتنی بر ستون استفاده می کند. تبدیل یک بردار با پس ضرب بردار انجام می شود، به عنوان مثال (matrix * vector)
، همانطور که توسط rsMatrixMultiply () ارائه شده است.
برای ایجاد یک ماتریس تبدیل که دو تبدیل را همزمان انجام می دهد، دو ماتریس منبع را ضرب کنید و اولین تبدیل به عنوان آرگومان مناسب است. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید. این از s2 * (s1 * v)
گرفته شده است که (s2 * s1) * v
است.
ما دو سبک توابع برای ایجاد ماتریس های تبدیل داریم: rsMatrixLoad Transformation و rsMatrix Transformation . سبک قبلی به سادگی ماتریس تبدیل را در آرگومان اول ذخیره می کند. دومی یک ماتریس تبدیل از قبل موجود را اصلاح می کند تا تبدیل جدید ابتدا اتفاق بیفتد. به عنوان مثال، اگر rsMatrixTranslate () را روی ماتریسی که قبلاً مقیاسبندی را انجام میدهد، فراخوانی کنید، ماتریس بهدستآمده وقتی روی یک بردار اعمال میشود، ابتدا ترجمه را انجام میدهد و سپس مقیاسگذاری را انجام میدهد.
خلاصه
توابع | |
---|---|
rsExtractFrustum Planes | صفحات فروستوم را محاسبه کنید |
rsIsSphereInFrustum | بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر |
rsMatrixGet | یک عنصر را دریافت کنید |
rsMatrixInverse | یک ماتریس را در جای خود معکوس می کند |
rsMatrixInverseTranspose | یک ماتریس را در جای خود معکوس و جابجا می کند |
rsMatrixLoad | یک ماتریس را بارگیری یا کپی کنید |
rsMatrixLoadFrustum | یک ماتریس طرح ریزی فروستوم را بارگذاری کنید |
rsMatrixLoadIdentity | بارگذاری ماتریس هویت |
rsMatrixLoadMultiply | دو ماتریس را ضرب کنید |
rsMatrixLoadOrtho | بارگذاری یک ماتریس طرح ریزی املایی |
rsMatrixLoadPerspective | بارگذاری یک ماتریس طرح ریزی پرسپکتیو |
rsMatrixLoadRotate | یک ماتریس چرخشی بارگذاری کنید |
rsMatrixLoadScale | یک ماتریس مقیاس بندی را بارگذاری کنید |
rsMatrixLoadTranslate | ماتریس ترجمه را بارگیری کنید |
rsMatrixMultiply | یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید |
rsMatrixRotate | یک چرخش را به یک ماتریس تبدیل اعمال کنید |
rsMatrixScale | یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید |
rsMatrixSet | یک عنصر را تنظیم کنید |
rsMatrixTranslate | یک ترجمه را به یک ماتریس تبدیل اعمال کنید |
rsMatrixTranspose | جابجایی یک مکان ماتریسی |
توابع
rsExtractFrustumPlanes : صفحات فروستوم را محاسبه کنید
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | در سطح 24 API اضافه شد |
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | از سطح API 24 و بالاتر حذف شد |
پارامترها
viewProj | ماتریسی برای استخراج هواپیماها از. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
درست است |
6 صفحه فروستوم را از ماتریس طرح ریزی نمای محاسبه می کند
rsIsSphereInFrustum : بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر
bool rsIsSphereInFrustum( float4 * کره، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); |
پارامترها
کره | float4 نمایانگر کره است. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
اگر کره در 6 صفحه فروستوم قرار داشته باشد، مقدار true را برمیگرداند.
rsMatrixGet : یک عنصر را دریافت کنید
float rsMatrixGet(const rs_matrix2x2 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix3x3 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix4x4 * m, uint32_t col, uint32_t row); |
پارامترها
متر | ماتریس برای استخراج عنصر از. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید استخراج شود. |
ردیف | ردیف صفر عنصری که باید استخراج شود. |
یک عنصر از یک ماتریس را برمی گرداند.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixInverse : یک ماتریس را در جای خود معکوس می کند
bool rsMatrixInverse( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای معکوس کردن. |
---|
اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixInverseTranspose : یک ماتریس را در جای خود معکوس و جابجا می کند
bool rsMatrixInverseTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای اصلاح |
---|
ماتریس ابتدا معکوس شده و سپس انتقال داده می شود. اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixLoad : یک ماتریس را بارگیری یا کپی کنید
void rsMatrixLoad( rs_matrix2x2 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix2x2 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix4x4 * source); |
پارامترها
مقصد | ماتریس برای تنظیم. |
---|---|
آرایه | آرایه ای از مقادیر برای تنظیم ماتریس. این آرایه ها بسته به اندازه ماتریس باید 4، 9 یا 16 شناور طول داشته باشند. |
منبع | ماتریس منبع |
عناصر یک ماتریس را از آرایه ای از شناورها یا از ماتریس دیگری تنظیم کنید.
اگر از یک آرایه بارگذاری می شود، شناورها باید به ترتیب ردیف اصلی باشند، یعنی عنصر یک row 0, column 0
باید ابتدا باشد، سپس عنصر در row 0, column 1
و غیره قرار گیرد.
اگر بارگیری از یک ماتریس و منبع کوچکتر از مقصد باشد، بقیه مقصد با عناصر ماتریس هویت پر می شود. به عنوان مثال، بارگذاری یک rs_matrix2x2 در یک rs_matrix4x4 باعث می شود:
m00 | m01 | 0.0 | 0.0 |
m10 | m11 | 0.0 | 0.0 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
rsMatrixLoadFrustum : یک ماتریس طرح ریزی فروستوم را بارگذاری کنید
void rsMatrixLoadFrustum( rs_matrix4x4 * m، شناور چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی فروستوم میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
تغییر میدهد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadIdentity : ماتریس هویت بار
void rsMatrixLoadIdentity( rs_matrix2x2 * m); | |
void rsMatrixLoadIdentity( rs_matrix3x3 * m); | |
void rsMatrixLoadIdentity( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای تنظیم. |
---|
عناصر یک ماتریس را روی ماتریس هویت قرار دهید.
rsMatrixLoadMultiply : دو ماتریس را ضرب کنید
void rsMatrixLoadMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
lhs | ماتریس سمت چپ محصول |
rhs | ماتریس سمت راست محصول |
m را به حاصل ضرب ماتریس lhs * rhs
تنظیم می کند.
برای ترکیب دو ماتریس تبدیل 4×4، ماتریس تبدیل دوم را در ماتریس تبدیل اول ضرب کنید. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید.
هشدار: قبل از نسخه 21، ذخیره نتیجه در ماتریس سمت راست پشتیبانی نمیشود و منجر به رفتار نامشخص میشود. به جای آن از rsMatrixMulitply استفاده کنید. به عنوان مثال، به جای انجام rsMatrixLoadMultiply (&m2r، &m2r، &m2l)، از rsMatrixMultiply (&m2r، &m2l) استفاده کنید. rsMatrixLoadMultiply (&m2l، &m2r، &m2l) همانطور که انتظار می رود کار می کند.
rsMatrixLoadOrtho : بارگذاری یک ماتریس طرح ریزی املایی
void rsMatrixLoadOrtho( rs_matrix4x4 * m، شناور به چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی املایی میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
را به یک مکعب واحد تبدیل میکند که گوشه آن در (-1, -1, -1)
و نقطه مقابل آن در (1, 1, 1)
است. (1, 1, 1)
.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
به https://en.wikipedia.org/wiki/Orthographic_projection مراجعه کنید.
rsMatrixLoadPerspective : بارگذاری یک ماتریس طرح ریزی پرسپکتیو
void rsMatrixLoadPerspective( rs_matrix4x4 * m, float fovy, float aspect, float near, float far); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
فووی | میدان دید، بر حسب درجه در امتداد محور Y. |
جنبه | نسبت x / y. |
نزدیک | نزدیک هواپیمای بریده. |
دور | هواپیمای دور برش. |
با فرض یک میدان دید متقارن، یک ماتریس طرح ریزی پرسپکتیو می سازد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadRotate : بارگذاری یک ماتریس چرخشی
void rsMatrixLoadRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
این تابع یک ماتریس چرخشی ایجاد می کند. محور چرخش بردار (x, y, z)
است.
برای چرخاندن یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
https://en.wikipedia.org/wiki/Rotation_matrix را ببینید.
rsMatrixLoadScale : بارگذاری یک ماتریس مقیاسپذیر
void rsMatrixLoadScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
این تابع یک ماتریس مقیاس بندی ایجاد می کند که در آن هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای مقیاس بندی یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadTranslate : بارگذاری یک ماتریس ترجمه
void rsMatrixLoadTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
این تابع یک ماتریس ترجمه ایجاد می کند که در آن یک عدد به هر عنصر یک بردار اضافه می شود.
برای ترجمه یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixMultiply : یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید
float2 rsMatrixMultiply(const rs_matrix2x2 * m, float2 in); | در سطح 14 API اضافه شده است |
float2 rsMatrixMultiply( rs_matrix2x2 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float2 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float3 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float2 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float3 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float4 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float4 in); | از سطح API 14 و بالاتر حذف شد |
void rsMatrixMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * rhs); | |
void rsMatrixMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * rhs); | |
void rsMatrixMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس سمت چپ محصول و ماتریسی که باید تنظیم شود. |
---|---|
rhs | ماتریس سمت راست محصول |
در |
برای نوع ماتریس با ماتریس، m را به محصول ماتریس m * rhs
تنظیم می کند.
هنگام ترکیب دو ماتریس تبدیل 4x4 با استفاده از این تابع، ماتریس حاصل با انجام تبدیل rhs ابتدا و سپس تبدیل m اصلی مطابقت دارد.
برای متغیر ماتریس بردار، پس از ضرب بردار توسط ماتریس را برمی گرداند، یعنی. m * in
.
وقتی یک float3 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (0، 1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix3x3 ضرب می کنیم، بردار با (0) منبسط می شود.
با شروع API 14، این تابع یک ماتریس const را به عنوان اولین آرگومان می گیرد.
rsMatrixRotate : یک چرخش را به یک ماتریس تبدیل اعمال کنید
void rsMatrixRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
ماتریس m را با یک ماتریس چرخشی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک چرخش انجام دهد. محور چرخش بردار (x, y, z)
است.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixScale : یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید
void rsMatrixScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
ماتریس m را با یک ماتریس مقیاس بندی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک مقیاس بندی انجام شود. هنگام مقیاس بندی، هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixSet : یک عنصر را تنظیم کنید
void rsMatrixSet( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v); |
پارامترها
متر | ماتریسی که اصلاح خواهد شد. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید تنظیم شود. |
ردیف | ردیف مبتنی بر صفر عنصری که باید تنظیم شود. |
v | مقدار برای تنظیم |
یک عنصر از یک ماتریس را تنظیم کنید.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixTranslate : یک ترجمه را به یک ماتریس تبدیل اعمال کنید
void rsMatrixTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
ماتریس m را با یک ماتریس ترجمه ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک ترجمه انجام دهد. هنگام ترجمه، یک عدد به هر جزء یک بردار اضافه می شود.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixTranspose : یک مکان ماتریسی را جابجا کنید
void rsMatrixTranspose( rs_matrix2x2 * m); | |
void rsMatrixTranspose( rs_matrix3x3 * m); | |
void rsMatrixTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای انتقال. |
---|
ماتریس m را در جای خود جابجا کنید.
نمای کلی
این توابع به شما امکان می دهند ماتریس های مربعی با رتبه های 2x2، 3x3 و 4x4 را دستکاری کنید. آنها به ویژه برای تبدیل های گرافیکی مفید هستند و با OpenGL سازگار هستند.
ما از یک شاخص مبتنی بر صفر برای سطرها و ستون ها استفاده می کنیم. به عنوان مثال آخرین عنصر یک rs_matrix4x4 در (3، 3) یافت می شود.
RenderScript از ماتریس های ستون اصلی و بردارهای مبتنی بر ستون استفاده می کند. تبدیل یک بردار با پس ضرب بردار انجام می شود، به عنوان مثال (matrix * vector)
، همانطور که توسط rsMatrixMultiply () ارائه شده است.
برای ایجاد یک ماتریس تبدیل که دو تبدیل را همزمان انجام می دهد، دو ماتریس منبع را ضرب کنید و اولین تبدیل به عنوان آرگومان مناسب است. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید. این از s2 * (s1 * v)
گرفته شده است که (s2 * s1) * v
است.
ما دو سبک توابع برای ایجاد ماتریس های تبدیل داریم: rsMatrixLoad Transformation و rsMatrix Transformation . سبک قبلی به سادگی ماتریس تبدیل را در آرگومان اول ذخیره می کند. دومی یک ماتریس تبدیل از قبل موجود را اصلاح می کند تا تبدیل جدید ابتدا اتفاق بیفتد. به عنوان مثال، اگر rsMatrixTranslate () را روی ماتریسی که قبلاً مقیاسبندی را انجام میدهد، فراخوانی کنید، ماتریس بهدستآمده وقتی روی یک بردار اعمال میشود، ابتدا ترجمه را انجام میدهد و سپس مقیاسگذاری را انجام میدهد.
خلاصه
توابع | |
---|---|
rsExtractFrustum Planes | صفحات فروستوم را محاسبه کنید |
rsIsSphereInFrustum | بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر |
rsMatrixGet | یک عنصر را دریافت کنید |
rsMatrixInverse | یک ماتریس را در جای خود معکوس می کند |
rsMatrixInverseTranspose | یک ماتریس را در جای خود معکوس و جابجا می کند |
rsMatrixLoad | یک ماتریس را بارگیری یا کپی کنید |
rsMatrixLoadFrustum | یک ماتریس طرح ریزی فروستوم را بارگذاری کنید |
rsMatrixLoadIdentity | بارگذاری ماتریس هویت |
rsMatrixLoadMultiply | دو ماتریس را ضرب کنید |
rsMatrixLoadOrtho | بارگذاری یک ماتریس طرح ریزی املایی |
rsMatrixLoadPerspective | بارگذاری یک ماتریس طرح ریزی پرسپکتیو |
rsMatrixLoadRotate | یک ماتریس چرخشی بارگذاری کنید |
rsMatrixLoadScale | یک ماتریس مقیاس بندی را بارگذاری کنید |
rsMatrixLoadTranslate | ماتریس ترجمه را بارگیری کنید |
rsMatrixMultiply | یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید |
rsMatrixRotate | یک چرخش را به یک ماتریس تبدیل اعمال کنید |
rsMatrixScale | یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید |
rsMatrixSet | یک عنصر را تنظیم کنید |
rsMatrixTranslate | یک ترجمه را به یک ماتریس تبدیل اعمال کنید |
rsMatrixTranspose | جابجایی یک مکان ماتریسی |
توابع
rsExtractFrustumPlanes : صفحات فروستوم را محاسبه کنید
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | در سطح 24 API اضافه شد |
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | از سطح API 24 و بالاتر حذف شد |
پارامترها
viewProj | ماتریسی برای استخراج هواپیماها از. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
درست است |
6 صفحه فروستوم را از ماتریس طرح ریزی نمای محاسبه می کند
rsIsSphereInFrustum : بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر
bool rsIsSphereInFrustum( float4 * کره، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); |
پارامترها
کره | float4 نمایانگر کره است. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
اگر کره در 6 صفحه فروستوم قرار داشته باشد، مقدار true را برمیگرداند.
rsMatrixGet : یک عنصر را دریافت کنید
float rsMatrixGet(const rs_matrix2x2 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix3x3 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix4x4 * m, uint32_t col, uint32_t row); |
پارامترها
متر | ماتریس برای استخراج عنصر از. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید استخراج شود. |
ردیف | ردیف صفر عنصری که باید استخراج شود. |
یک عنصر از یک ماتریس را برمی گرداند.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixInverse : یک ماتریس را در جای خود معکوس می کند
bool rsMatrixInverse( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای معکوس کردن. |
---|
اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixInverseTranspose : یک ماتریس را در جای خود معکوس و جابجا می کند
bool rsMatrixInverseTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای اصلاح |
---|
ماتریس ابتدا معکوس شده و سپس انتقال داده می شود. اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixLoad : یک ماتریس را بارگیری یا کپی کنید
void rsMatrixLoad( rs_matrix2x2 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix2x2 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix4x4 * source); |
پارامترها
مقصد | ماتریس برای تنظیم. |
---|---|
آرایه | آرایه ای از مقادیر برای تنظیم ماتریس. این آرایه ها بسته به اندازه ماتریس باید 4، 9 یا 16 شناور طول داشته باشند. |
منبع | ماتریس منبع |
عناصر یک ماتریس را از آرایه ای از شناورها یا از ماتریس دیگری تنظیم کنید.
اگر از یک آرایه بارگذاری می شود، شناورها باید به ترتیب ردیف اصلی باشند، یعنی عنصر یک row 0, column 0
باید ابتدا باشد، سپس عنصر در row 0, column 1
و غیره قرار گیرد.
اگر بارگیری از یک ماتریس و منبع کوچکتر از مقصد باشد، بقیه مقصد با عناصر ماتریس هویت پر می شود. به عنوان مثال، بارگذاری یک rs_matrix2x2 در یک rs_matrix4x4 باعث می شود:
m00 | m01 | 0.0 | 0.0 |
m10 | m11 | 0.0 | 0.0 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
rsMatrixLoadFrustum : یک ماتریس طرح ریزی فروستوم را بارگذاری کنید
void rsMatrixLoadFrustum( rs_matrix4x4 * m، شناور چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی فروستوم میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
تغییر میدهد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadIdentity : ماتریس هویت بار
void rsMatrixLoadIdentity( rs_matrix2x2 * m); | |
void rsMatrixLoadIdentity( rs_matrix3x3 * m); | |
void rsMatrixLoadIdentity( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای تنظیم. |
---|
عناصر یک ماتریس را روی ماتریس هویت قرار دهید.
rsMatrixLoadMultiply : دو ماتریس را ضرب کنید
void rsMatrixLoadMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
lhs | ماتریس سمت چپ محصول |
rhs | ماتریس سمت راست محصول |
m را به حاصل ضرب ماتریس lhs * rhs
تنظیم می کند.
برای ترکیب دو ماتریس تبدیل 4×4، ماتریس تبدیل دوم را در ماتریس تبدیل اول ضرب کنید. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید.
هشدار: قبل از نسخه 21، ذخیره نتیجه در ماتریس سمت راست پشتیبانی نمیشود و منجر به رفتار نامشخص میشود. به جای آن از rsMatrixMulitply استفاده کنید. به عنوان مثال، به جای انجام rsMatrixLoadMultiply (&m2r، &m2r، &m2l)، از rsMatrixMultiply (&m2r، &m2l) استفاده کنید. rsMatrixLoadMultiply (&m2l، &m2r، &m2l) همانطور که انتظار می رود کار می کند.
rsMatrixLoadOrtho : بارگذاری یک ماتریس طرح ریزی املایی
void rsMatrixLoadOrtho( rs_matrix4x4 * m، شناور به چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی املایی میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
را به یک مکعب واحد تبدیل میکند که گوشه آن در (-1, -1, -1)
و نقطه مقابل آن در (1, 1, 1)
است. (1, 1, 1)
.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
به https://en.wikipedia.org/wiki/Orthographic_projection مراجعه کنید.
rsMatrixLoadPerspective : بارگذاری یک ماتریس طرح ریزی پرسپکتیو
void rsMatrixLoadPerspective( rs_matrix4x4 * m, float fovy, float aspect, float near, float far); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
فووی | میدان دید، بر حسب درجه در امتداد محور Y. |
جنبه | نسبت x / y. |
نزدیک | نزدیک هواپیمای بریده. |
دور | هواپیمای دور برش. |
با فرض یک میدان دید متقارن، یک ماتریس طرح ریزی پرسپکتیو می سازد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadRotate : بارگذاری یک ماتریس چرخشی
void rsMatrixLoadRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
این تابع یک ماتریس چرخشی ایجاد می کند. محور چرخش بردار (x, y, z)
است.
برای چرخاندن یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
https://en.wikipedia.org/wiki/Rotation_matrix را ببینید.
rsMatrixLoadScale : بارگذاری یک ماتریس مقیاسپذیر
void rsMatrixLoadScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
این تابع یک ماتریس مقیاس بندی ایجاد می کند که در آن هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای مقیاس بندی یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadTranslate : بارگذاری یک ماتریس ترجمه
void rsMatrixLoadTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
این تابع یک ماتریس ترجمه ایجاد می کند که در آن یک عدد به هر عنصر یک بردار اضافه می شود.
برای ترجمه یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixMultiply : یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید
float2 rsMatrixMultiply(const rs_matrix2x2 * m, float2 in); | در سطح 14 API اضافه شده است |
float2 rsMatrixMultiply( rs_matrix2x2 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float2 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float3 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float2 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float3 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float4 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float4 in); | از سطح API 14 و بالاتر حذف شد |
void rsMatrixMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * rhs); | |
void rsMatrixMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * rhs); | |
void rsMatrixMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس سمت چپ محصول و ماتریسی که باید تنظیم شود. |
---|---|
rhs | ماتریس سمت راست محصول |
در |
برای نوع ماتریس با ماتریس، m را به محصول ماتریس m * rhs
تنظیم می کند.
هنگام ترکیب دو ماتریس تبدیل 4x4 با استفاده از این تابع، ماتریس حاصل با انجام تبدیل rhs ابتدا و سپس تبدیل m اصلی مطابقت دارد.
برای متغیر ماتریس بردار، پس از ضرب بردار توسط ماتریس را برمی گرداند، یعنی. m * in
.
وقتی یک float3 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (0، 1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix3x3 ضرب می کنیم، بردار با (0) منبسط می شود.
با شروع API 14، این تابع یک ماتریس const را به عنوان اولین آرگومان می گیرد.
rsMatrixRotate : یک چرخش را به یک ماتریس تبدیل اعمال کنید
void rsMatrixRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
ماتریس m را با یک ماتریس چرخشی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک چرخش انجام دهد. محور چرخش بردار (x, y, z)
است.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixScale : یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید
void rsMatrixScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
ماتریس m را با یک ماتریس مقیاس بندی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک مقیاس بندی انجام شود. هنگام مقیاس بندی، هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixSet : یک عنصر را تنظیم کنید
void rsMatrixSet( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v); |
پارامترها
متر | ماتریسی که اصلاح خواهد شد. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید تنظیم شود. |
ردیف | ردیف مبتنی بر صفر عنصری که باید تنظیم شود. |
v | مقدار برای تنظیم |
یک عنصر از یک ماتریس را تنظیم کنید.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixTranslate : یک ترجمه را به یک ماتریس تبدیل اعمال کنید
void rsMatrixTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
ماتریس m را با یک ماتریس ترجمه ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک ترجمه انجام دهد. هنگام ترجمه، یک عدد به هر جزء یک بردار اضافه می شود.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixTranspose : یک مکان ماتریسی را جابجا کنید
void rsMatrixTranspose( rs_matrix2x2 * m); | |
void rsMatrixTranspose( rs_matrix3x3 * m); | |
void rsMatrixTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای انتقال. |
---|
ماتریس m را در جای خود جابجا کنید.
نمای کلی
این توابع به شما امکان می دهند ماتریس های مربعی با رتبه های 2x2، 3x3 و 4x4 را دستکاری کنید. آنها به ویژه برای تبدیل های گرافیکی مفید هستند و با OpenGL سازگار هستند.
ما از یک شاخص مبتنی بر صفر برای سطرها و ستون ها استفاده می کنیم. به عنوان مثال آخرین عنصر یک rs_matrix4x4 در (3، 3) یافت می شود.
RenderScript از ماتریس های ستون اصلی و بردارهای مبتنی بر ستون استفاده می کند. تبدیل یک بردار با پس ضرب بردار انجام می شود، به عنوان مثال (matrix * vector)
، همانطور که توسط rsMatrixMultiply () ارائه شده است.
برای ایجاد یک ماتریس تبدیل که دو تبدیل را همزمان انجام می دهد، دو ماتریس منبع را ضرب کنید و اولین تبدیل به عنوان آرگومان مناسب است. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید. این از s2 * (s1 * v)
گرفته شده است که (s2 * s1) * v
است.
ما دو سبک توابع برای ایجاد ماتریس های تبدیل داریم: rsMatrixLoad Transformation و rsMatrix Transformation . سبک قبلی به سادگی ماتریس تبدیل را در آرگومان اول ذخیره می کند. دومی یک ماتریس تبدیل از قبل موجود را اصلاح می کند تا تبدیل جدید ابتدا اتفاق بیفتد. به عنوان مثال، اگر rsMatrixTranslate () را روی ماتریسی که قبلاً مقیاسبندی را انجام میدهد، فراخوانی کنید، ماتریس بهدستآمده وقتی روی یک بردار اعمال میشود، ابتدا ترجمه را انجام میدهد و سپس مقیاسگذاری را انجام میدهد.
خلاصه
توابع | |
---|---|
rsExtractFrustum Planes | صفحات فروستوم را محاسبه کنید |
rsIsSphereInFrustum | بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر |
rsMatrixGet | یک عنصر را دریافت کنید |
rsMatrixInverse | یک ماتریس را در جای خود معکوس می کند |
rsMatrixInverseTranspose | یک ماتریس را در جای خود معکوس و جابجا می کند |
rsMatrixLoad | یک ماتریس را بارگیری یا کپی کنید |
rsMatrixLoadFrustum | یک ماتریس طرح ریزی فروستوم را بارگذاری کنید |
rsMatrixLoadIdentity | بارگذاری ماتریس هویت |
rsMatrixLoadMultiply | دو ماتریس را ضرب کنید |
rsMatrixLoadOrtho | بارگذاری یک ماتریس طرح ریزی املایی |
rsMatrixLoadPerspective | بارگذاری یک ماتریس طرح ریزی پرسپکتیو |
rsMatrixLoadRotate | یک ماتریس چرخشی بارگذاری کنید |
rsMatrixLoadScale | یک ماتریس مقیاس بندی را بارگذاری کنید |
rsMatrixLoadTranslate | ماتریس ترجمه را بارگیری کنید |
rsMatrixMultiply | یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید |
rsMatrixRotate | یک چرخش را به یک ماتریس تبدیل اعمال کنید |
rsMatrixScale | یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید |
rsMatrixSet | یک عنصر را تنظیم کنید |
rsMatrixTranslate | یک ترجمه را به یک ماتریس تبدیل اعمال کنید |
rsMatrixTranspose | جابجایی یک مکان ماتریسی |
توابع
rsExtractFrustumPlanes : صفحات فروستوم را محاسبه کنید
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | در سطح 24 API اضافه شد |
void rsExtractFrustumPlanes(const rs_matrix4x4 * viewProj، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); | از سطح API 24 و بالاتر حذف شد |
پارامترها
viewProj | ماتریسی برای استخراج هواپیماها از. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
درست است |
6 صفحه فروستوم را از ماتریس طرح ریزی نمای محاسبه می کند
rsIsSphereInFrustum : بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر
bool rsIsSphereInFrustum( float4 * کره، float4 * چپ، float4 * راست، float4 * بالا، float4 * پایین، float4 * نزدیک، float4 * دور); |
پارامترها
کره | float4 نمایانگر کره است. |
---|---|
سمت چپ | هواپیمای چپ |
درست است | هواپیمای راست |
بالا | هواپیمای بالا. |
پایین | هواپیمای پایین. |
نزدیک | نزدیک هواپیما |
دور | هواپیمای دور. |
اگر کره در 6 صفحه فروستوم قرار داشته باشد، مقدار true را برمیگرداند.
rsMatrixGet : یک عنصر را دریافت کنید
float rsMatrixGet(const rs_matrix2x2 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix3x3 * m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix4x4 * m, uint32_t col, uint32_t row); |
پارامترها
متر | ماتریس برای استخراج عنصر از. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید استخراج شود. |
ردیف | ردیف صفر عنصری که باید استخراج شود. |
یک عنصر از یک ماتریس را برمی گرداند.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixInverse : یک ماتریس را در جای خود معکوس می کند
bool rsMatrixInverse( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای معکوس کردن. |
---|
اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixInverseTranspose : یک ماتریس را در جای خود معکوس و جابجا می کند
bool rsMatrixInverseTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای اصلاح |
---|
ماتریس ابتدا معکوس شده و سپس انتقال داده می شود. اگر ماتریس با موفقیت معکوس شده باشد، مقدار true را برمی گرداند.
rsMatrixLoad : یک ماتریس را بارگیری یا کپی کنید
void rsMatrixLoad( rs_matrix2x2 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix2x2 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix3x3 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const float* array); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix2x2 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix3x3 * source); | |
void rsMatrixLoad( rs_matrix4x4 * مقصد، const rs_matrix4x4 * source); |
پارامترها
مقصد | ماتریس برای تنظیم. |
---|---|
آرایه | آرایه ای از مقادیر برای تنظیم ماتریس. این آرایه ها بسته به اندازه ماتریس باید 4، 9 یا 16 شناور طول داشته باشند. |
منبع | ماتریس منبع |
عناصر یک ماتریس را از آرایه ای از شناورها یا از ماتریس دیگری تنظیم کنید.
اگر از یک آرایه بارگذاری می شود، شناورها باید به ترتیب ردیف اصلی باشند، یعنی عنصر یک row 0, column 0
باید ابتدا باشد، سپس عنصر در row 0, column 1
و غیره قرار گیرد.
اگر بارگیری از یک ماتریس و منبع کوچکتر از مقصد باشد، بقیه مقصد با عناصر ماتریس هویت پر می شود. به عنوان مثال، بارگذاری یک rs_matrix2x2 در یک rs_matrix4x4 باعث می شود:
m00 | m01 | 0.0 | 0.0 |
m10 | m11 | 0.0 | 0.0 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
rsMatrixLoadFrustum : یک ماتریس طرح ریزی فروستوم را بارگذاری کنید
void rsMatrixLoadFrustum( rs_matrix4x4 * m، شناور چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی فروستوم میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
را تغییر میدهد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadIdentity : ماتریس هویت بار
void rsMatrixLoadIdentity( rs_matrix2x2 * m); | |
void rsMatrixLoadIdentity( rs_matrix3x3 * m); | |
void rsMatrixLoadIdentity( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای تنظیم. |
---|
عناصر یک ماتریس را روی ماتریس هویت قرار دهید.
rsMatrixLoadMultiply : دو ماتریس را ضرب کنید
void rsMatrixLoadMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * lhs, const rs_matrix2x2 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * lhs, const rs_matrix3x3 * rhs); | |
void rsMatrixLoadMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * lhs, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
lhs | ماتریس سمت چپ محصول |
rhs | ماتریس سمت راست محصول |
m را به حاصل ضرب ماتریس lhs * rhs
تنظیم می کند.
برای ترکیب دو ماتریس تبدیل 4×4، ماتریس تبدیل دوم را در ماتریس تبدیل اول ضرب کنید. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1)
را فراخوانی کنید.
هشدار: قبل از نسخه 21، ذخیره نتیجه در ماتریس سمت راست پشتیبانی نمیشود و منجر به رفتار نامشخص میشود. به جای آن از rsMatrixMulitply استفاده کنید. به عنوان مثال، به جای انجام rsMatrixLoadMultiply (&m2r، &m2r، &m2l)، از rsMatrixMultiply (&m2r، &m2l) استفاده کنید. rsMatrixLoadMultiply (&m2l، &m2r، &m2l) همانطور که انتظار می رود کار می کند.
rsMatrixLoadOrtho : بارگذاری یک ماتریس طرح ریزی املایی
void rsMatrixLoadOrtho( rs_matrix4x4 * m، شناور به چپ، شناور سمت راست، شناور پایین، شناور بالا، شناور نزدیک، شناور دور)؛ |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
سمت چپ | |
درست است | |
پایین | |
بالا | |
نزدیک | |
دور |
یک ماتریس پیشبینی املایی میسازد و کادر مشخص شده توسط شش صفحه برش left, right, bottom, top, near, far
را به یک مکعب واحد تبدیل میکند که گوشه آن در (-1, -1, -1)
و نقطه مقابل آن در (1, 1, 1)
است. (1, 1, 1)
.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
به https://en.wikipedia.org/wiki/Orthographic_projection مراجعه کنید.
rsMatrixLoadPerspective : بارگذاری یک ماتریس طرح ریزی پرسپکتیو
void rsMatrixLoadPerspective( rs_matrix4x4 * m, float fovy, float aspect, float near, float far); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
فووی | میدان دید، بر حسب درجه در امتداد محور Y. |
جنبه | نسبت x / y. |
نزدیک | نزدیک هواپیمای بریده. |
دور | هواپیمای دور برش. |
با فرض یک میدان دید متقارن، یک ماتریس طرح ریزی پرسپکتیو می سازد.
برای اعمال این طرح بر روی یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadRotate : بارگذاری یک ماتریس چرخشی
void rsMatrixLoadRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
این تابع یک ماتریس چرخشی ایجاد می کند. محور چرخش بردار (x, y, z)
است.
برای چرخاندن یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
https://en.wikipedia.org/wiki/Rotation_matrix را ببینید.
rsMatrixLoadScale : بارگذاری یک ماتریس مقیاسپذیر
void rsMatrixLoadScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
این تابع یک ماتریس مقیاس بندی ایجاد می کند که در آن هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای مقیاس بندی یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixLoadTranslate : بارگذاری یک ماتریس ترجمه
void rsMatrixLoadTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای تنظیم. |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
این تابع یک ماتریس ترجمه ایجاد می کند که در آن یک عدد به هر عنصر یک بردار اضافه می شود.
برای ترجمه یک بردار، بردار را با استفاده از rsMatrixMultiply () در ماتریس ایجاد شده ضرب کنید.
rsMatrixMultiply : یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید
float2 rsMatrixMultiply(const rs_matrix2x2 * m, float2 in); | در سطح 14 API اضافه شده است |
float2 rsMatrixMultiply( rs_matrix2x2 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float2 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply(const rs_matrix3x3 * m, float3 in); | در سطح 14 API اضافه شده است |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float3 rsMatrixMultiply( rs_matrix3x3 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float2 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float3 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply(const rs_matrix4x4 * m, float4 in); | در سطح 14 API اضافه شده است |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float2 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float3 in); | از سطح API 14 و بالاتر حذف شد |
float4 rsMatrixMultiply( rs_matrix4x4 * m, float4 in); | از سطح API 14 و بالاتر حذف شد |
void rsMatrixMultiply( rs_matrix2x2 * m, const rs_matrix2x2 * rhs); | |
void rsMatrixMultiply( rs_matrix3x3 * m, const rs_matrix3x3 * rhs); | |
void rsMatrixMultiply( rs_matrix4x4 * m, const rs_matrix4x4 * rhs); |
پارامترها
متر | ماتریس سمت چپ محصول و ماتریسی که باید تنظیم شود. |
---|---|
rhs | ماتریس سمت راست محصول |
در |
برای نوع ماتریس با ماتریس، m را به محصول ماتریس m * rhs
تنظیم می کند.
هنگام ترکیب دو ماتریس تبدیل 4x4 با استفاده از این تابع، ماتریس حاصل با انجام تبدیل rhs ابتدا و سپس تبدیل m اصلی مطابقت دارد.
برای متغیر ماتریس بردار، پس از ضرب بردار توسط ماتریس را برمی گرداند، یعنی. m * in
.
وقتی یک float3 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix4x4 ضرب می کنیم، بردار با (0، 1) منبسط می شود.
وقتی یک float2 را در یک rs_matrix3x3 ضرب می کنیم، بردار با (0) منبسط می شود.
با شروع API 14، این تابع یک ماتریس const را به عنوان اولین آرگومان می گیرد.
rsMatrixRotate : یک چرخش را به یک ماتریس تبدیل اعمال کنید
void rsMatrixRotate( rs_matrix4x4 * m, float rot, float x, float y, float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
پوسیدگی | چقدر چرخش باید انجام داد، بر حسب درجه. |
x | جزء X بردار که محور چرخش است. |
y | جزء Y از بردار که محور چرخش است. |
z | جزء Z از بردار که محور چرخش است. |
ماتریس m را با یک ماتریس چرخشی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک چرخش انجام دهد. محور چرخش بردار (x, y, z)
است.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixScale : یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید
void rsMatrixScale( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | چند تا برای مقیاس بندی مولفه های x بر اساس. |
y | چند تا برای مقیاس بندی اجزای y بر اساس. |
z | چند تا برای مقیاس بندی اجزای z بر اساس. |
ماتریس m را با یک ماتریس مقیاس بندی ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک مقیاس بندی انجام شود. هنگام مقیاس بندی، هر جزء از یک بردار در یک عدد ضرب می شود. این عدد می تواند منفی باشد.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixSet : یک عنصر را تنظیم کنید
void rsMatrixSet( rs_matrix2x2 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix3x3 * m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet( rs_matrix4x4 * m, uint32_t col, uint32_t row, float v); |
پارامترها
متر | ماتریسی که اصلاح خواهد شد. |
---|---|
سرهنگ | ستون مبتنی بر صفر عنصری که باید تنظیم شود. |
ردیف | ردیف مبتنی بر صفر عنصری که باید تنظیم شود. |
v | مقدار برای تنظیم |
یک عنصر از یک ماتریس را تنظیم کنید.
هشدار: ترتیب پارامترهای ستون و ردیف ممکن است غیرمنتظره باشد.
rsMatrixTranslate : یک ترجمه را به یک ماتریس تبدیل اعمال کنید
void rsMatrixTranslate( rs_matrix4x4 * m، float x، float y، float z); |
پارامترها
متر | ماتریس برای اصلاح |
---|---|
x | عددی که باید به هر جزء x اضافه شود. |
y | عددی که باید به هر جزء y اضافه شود. |
z | عددی که باید به هر جزء z اضافه شود. |
ماتریس m را با یک ماتریس ترجمه ضرب کنید.
این تابع یک ماتریس تبدیل را تغییر می دهد تا ابتدا یک ترجمه انجام دهد. هنگام ترجمه، یک عدد به هر جزء یک بردار اضافه می شود.
برای اعمال این تبدیل ترکیبی به یک بردار، با استفاده از rsMatrixMultiply () بردار را در ماتریس ایجاد شده ضرب کنید.
rsMatrixTranspose : یک مکان ماتریسی را جابجا کنید
void rsMatrixTranspose( rs_matrix2x2 * m); | |
void rsMatrixTranspose( rs_matrix3x3 * m); | |
void rsMatrixTranspose( rs_matrix4x4 * m); |
پارامترها
متر | ماتریس برای انتقال. |
---|
ماتریس m را در جای خود جابجا کنید.