نظرة عامة
تتيح لك هذه الدوال معالجة المصفوفات المربعة للرتبة 2x2 و3x3 و4x4. وهي مفيدة بشكل خاص في عمليات التحويل الرسومية ومتوافقة مع OpenGL.
للصفوف والأعمدة، نستخدم فهرس صفري. على سبيل المثال، تم العثور على العنصر الأخير في rs_matrix4x4 في (3، 3).
يستخدم RenderScript المصفوفات الرئيسية العمود والمتجهات المستندة إلى العمود. يتم تحويل المتجه
عن طريق postmultiplying الخط المتجه، مثل (matrix * vector)
،
كما هو موضّح في rsMatrixMultiply() .
لإنشاء مصفوفة تحويل تُجري عمليتَي تحويل في الوقت نفسه،
اضرب المصفوفتين المصدر، مع التحويل الأول كوسيطة صحيحة. على سبيل المثال، لإنشاء مصفوفة تحويل تطبق التحويل s1 متبوعًا بـ s2، استدعِ rsMatrixLoadMultiply(&combined, &s2, &s1)
.
يُستمَد ذلك من s2 * (s1 * v)
، وهو (s2 * s1) * v
.
لدينا نمطان من الدوال لإنشاء مصفوفات تحويل: rsMatrixLoadTransformation وrsMatrixTransformation. يخزن النمط السابق ببساطة مصفوفة التحويل في الوسيطة الأولى. يعدِّل نوع التحويل مصفوفة تحويل موجودة مسبقًا بحيث يحدث التحويل الجديد أولاً. على سبيل المثال، إذا استدعيت rsMatrix Translate() في مصفوفة تجري بالفعل تحجيم، فإن المصفوفة الناتجة عند تطبيقها على متجه ستقوم أولاً بالترجمة ثم التحجيم.
ملخّص
الدوال | |
---|---|
rsاستخراجFrustumPlanes | حساب مستويات الرسم البياني الهيكلي |
rsIsSphereInFrustum | للتحقق مما إذا كانت الكرة داخل مستويات الخطوط المسطحة |
rsMatrixGet | الحصول على عنصر واحد |
rsMatrixInverse | لعكس مصفوفة في مكانها |
rsMatrixInverseTranspose | يتم قلب المصفوفة وتبديل موضعها في مكانها. |
rsMatrixLoad | تحميل مصفوفة أو نسخها |
rsMatrixLoadFrustum | تحميل مصفوفة إسقاط للإسقاط |
rsMatrixLoadIdentity | تحميل مصفوفة الهوية |
rsMatrixLoadMultiply | ضرب مصفوفتَين |
rsMatrixLoadOrtho | تحميل مصفوفة إسقاط مخطَّطة |
rsMatrixLoadPerspective | تحميل مصفوفة إسقاط المنظور |
rsMatrixLoadrot | تحميل مصفوفة دوران |
rsMatrixLoadScale | تحميل مصفوفة قياس |
rsMatrixLoadTranslate | تحميل مصفوفة ترجمة |
rsMatrixMultiply | ضرب مصفوفة في متجه أو مصفوفة أخرى |
rsMatrixrot | تطبيق الدوران على مصفوفة تحويل |
rsMatrixScale | تطبيق قياس على مصفوفة تحويل |
rsMatrixSet | ضبط عنصر واحد |
rsMatrixTranslate | تطبيق ترجمة على مصفوفة تحويل |
rsMatrixTranspose | تبديل مكان مكان المصفوفة |
الدوال
rsاستخراجFrustumPlanes : احتساب المستويات الأساسية
void rsاستخراجFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* righ, float4* top, float4* top, float4* off, float4* وهكذا); | تمّت الإضافة في المستوى 24 من واجهة برمجة التطبيقات |
void rsاستخراجFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* right, float4* top, float4* below, float4* بالقرب, float4* appeal); | تمّت الإزالة من المستوى 24 من واجهة برمجة التطبيقات والمستويات الأعلى |
المعلّمات
عرض Proj | مصفوفة لاستخراج الطائرات منها. |
---|---|
لليسار | الطائرة اليسرى. |
لليمين | المستوى الأيمن. |
النصف العلوي | المستوى الأعلى. |
النصف السفلي | المستوى السفلي. |
بالقرب من | بالقرب من المستوى. |
بعيد | مستوى بعيد. |
رف |
احتساب 6 مستويات من العمق من مصفوفة إسقاط العرض
rsIsSphereInFrustum : للتحقّق مما إذا كانت الكرة داخل مستويات التكوين السطحي
bool rsIsSphereInFrustum(float4* camera, float4* left, float4* اليمين, float4* لأعلى, float4* أسفل, float4* بالقرب، float4* بعيد)، |
المعلّمات
كرة | float4 التي تمثل الكرة. |
---|---|
لليسار | الطائرة اليسرى. |
لليمين | المستوى الأيمن. |
النصف العلوي | المستوى الأعلى. |
النصف السفلي | المستوى السفلي. |
بالقرب من | بالقرب من المستوى. |
بعيد | مستوى بعيد. |
يتم إرجاع القيمة 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); |
المعلّمات
m | المصفوفة المراد استخراج العنصر منها. |
---|---|
عمود | عمود يستند إلى الصفر للعنصر المراد استخراجه |
صف | صف العنصر المطلوب استخراجه المستند إلى الصفر. |
لعرض عنصر واحد بمصفوفة.
تحذير: قد يكون ترتيب معلَمات العمود والصفوف غير متوقّع.
rsMatrixInverse : لعكس مصفوفة في مكانها
bool rsMatrixInverse(rs_matrix4x4* m); |
المعلّمات
m | المصفوفة المراد عكسها |
---|
لعرض true إذا تم قلب المصفوفة بنجاح.
rsMatrixInverseTranspose : لقلب مصفوفة وتبديل موضعها
bool rsMatrixInverseTranspose(rs_matrix4x4* m); |
المعلّمات
m | المصفوفة المطلوب تعديلها. |
---|
يتم قلب المصفوفة أولاً ثم تبديل موضعها. تؤدي إلى إرجاع true إذا تم قلب المصفوفة بنجاح.
rsMatrixLoad : تحميل مصفوفة أو نسخها
void rsMatrixLoad(rs_matrix2x2* destination, Cont float* asset); | |
void rsMatrixLoad(rs_matrix2x2* destination, Cont rs_matrix2x2* source); | |
void rsMatrixLoad(rs_matrix3x3* destination, Cont float* صفيف); | |
void rsMatrixLoad(rs_matrix3x3* destination, Cont rs_matrix3x3* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, Cont float* column); | |
void rsMatrixLoad(rs_matrix4x4* destination, Cont rs_matrix2x2* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, Cont rs_matrix3x3* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, Cont rs_matrix4x4* source); |
المعلّمات
الوجهة | المصفوفة المراد ضبطها. |
---|---|
صفيف | مصفوفة من القيم المطلوب تعيين المصفوفة إليها. يجب أن يكون طول هذه الصفائف 4 أو 9 أو 16 رقمًا عائمًا حسب حجم المصفوفة. |
مصدر الأخبار | مصفوفة المصدر. |
تعيين عناصر مصفوفة من مصفوفة من الأعداد العشرية أو من مصفوفة أخرى.
في حالة التحميل من صفيف، يجب أن تكون الأعداد العائمة بترتيب الصفوف الرئيسي، أي يجب أن يكون العنصر
row 0, column 0
أولاً متبوعًا بالعنصر في
row 0, column 1
، وهكذا.
إذا كان التحميل من مصفوفة والمصدر أصغر من الوجهة، يتم ملء بقية الوجهة بعناصر مصفوفة الهوية. على سبيل المثال، سينتج عن تحميل rs_matrix2x2 في rs_matrix4x4 ما يلي:
م | م01 | 0.0 | 0.0 |
م 10 | م11 | 0.0 | 0.0 |
0.0 | 0.0 | 1 | 0.0 |
0.0 | 0.0 | 0.0 | 1 |
rsMatrixLoadFrustum : تحميل مصفوفة عرض مخطط
void rsMatrixLoadFrustum(rs_matrix4x4* m, float left, float right, float below, float top, float بالقرب, floatالحد); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|---|
لليسار | |
لليمين | |
النصف السفلي | |
النصف العلوي | |
بالقرب من | |
بعيد |
تنشئ هذه الدالة مصفوفة إسقاط للقطع الخشبية، وتحوِّل الصندوق المحدد
من خلال مستويات القصاصة الست left, right, bottom, top, near, far
.
لتطبيق هذا الإسقاط على متجه، اضرب المتجه في المصفوفة التي تم إنشاؤها باستخدام rsMatrixMultiply().
rsMatrixLoadIdentity : تحميل مصفوفة الهوية
void rsMatrixLoadIdentity(rs_matrix2x2x2* m); | |
void rsMatrixLoadIdentity(rs_matrix3x3x3* m); | |
void rsMatrixLoadIdentity(rs_matrix4x4* m); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|
اضبط عناصر المصفوفة على مصفوفة الهوية.
rsMatrixLoadMultiply : ضرب مصفوفتين
void rsMatrixLoadMultiply(rs_matrix2x2* m, Cont rs_matrix2x2* lhs, Const rs_matrix2x2* rhs); | |
void rsMatrixLoadMultiply(rs_matrix3x3* m, Cont rs_matrix3x3* lhs, Const rs_matrix3x3* rhs); | |
void rsMatrixLoadMultiply(rs_matrix4x4* m, Cont rs_matrix4x4* lhs, Const rs_matrix4x4* rhs); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|---|
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, float left, float right, float below, float top, float بالقرب, floatالحد); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|---|
لليسار | |
لليمين | |
النصف السفلي | |
النصف العلوي | |
بالقرب من | |
بعيد |
تنشئ هذه الدالة مصفوفة إسقاط أوثوغرافية، وتحوِّل المربع المحدّد من خلال مستويات القطع الست left, right, bottom, top, near, far
إلى مكعب وحدة قياس زاوية عند (-1, -1, -1)
والعكس صحيح عند (1, 1, 1)
.
لتطبيق هذا الإسقاط على متجه، اضرب المتجه في المصفوفة التي تم إنشاؤها باستخدام rsMatrixMultiply().
يمكنك الاطّلاع على https://ar.wikipedia.org/wiki/Orthographic_projection .
rsMatrixLoadPerspective : تحميل مصفوفة عرض منظور
void rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float side, float about, float لكلٍّ); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|---|
محشو | مجال رؤية، بالدرجات على طول المحور ص. |
الجانب | نسبة x / y. |
بالقرب من | الاقتراب من مستوى القصاصة |
بعيد | طائرة تقطّع إلى مناطق بعيدة. |
تنشئ هذه الدالة مصفوفة إسقاط للمنظور، بافتراض مجال رؤية متماثل.
لتطبيق هذا الإسقاط على متجه، اضرب المتجه في المصفوفة التي تم إنشاؤها باستخدام rsMatrixMultiply().
rsMatrixLoadrot : تحميل مصفوفة دوران
void rsMatrixLoadدور(rs_matrix4x4* m, float rot, float x, float y, float z); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|---|
تعفن | مقدار تدوير الجهاز بالدرجات. |
x | المكون س للخط المتجه الذي يمثل محور الدوران. |
y | المكون Y للخط المتجه الذي يمثل محور الدوران. |
z | العنصر Z للخط المتجه الذي يمثل محور الدوران. |
تنشئ هذه الدالة مصفوفة دوران. محور الدوران هو الخط المتجه (x, y, z)
.
لتدوير متجه، اضرب المتجه في المصفوفة التي تم إنشاؤها باستخدام rsMatrixMultiply().
يمكنك الاطّلاع على https://ar.wikipedia.org/wiki/Rotation_matrix .
rsMatrixLoadScale : تحميل مصفوفة تحجيم
void rsMatrixLoadScale(rs_matrix4x4* m, float x, float y, float z); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|---|
x | عناصر متعددة لقياس عناصر x وفقًا لها. |
y | مضاعفة لقياس عناصر y وفقًا لها. |
z | عناصر متعددة لقياس عناصر z وفقًا لها. |
تنشئ هذه الدالة مصفوفة قياس، حيث يتم ضرب كل مكون في متجه في رقم. يمكن أن يكون هذا الرقم سالبًا.
لقياس متجه، اضرب المتجه في المصفوفة التي تم إنشاؤها باستخدام rsMatrixMultiply().
rsMatrixLoad Translate : تحميل مصفوفة ترجمة
void rsMatrixLoadTranslate(rs_matrix4x4* m, float x, float y, float z); |
المعلّمات
m | المصفوفة المراد ضبطها. |
---|---|
x | رقم لإضافته إلى كل مكون x. |
y | رقم لإضافته إلى كل مكون y. |
z | رقم لإضافته إلى كل مكون z. |
تنشئ هذه الدالة مصفوفة ترجمة، حيث تتم إضافة رقم إلى كل عنصر في متجه.
لترجمة متجه، اضرب المتجه في المصفوفة التي تم إنشاؤها باستخدام rsMatrixMultiply().
rsMatrixMultiply : ضرب مصفوفة في متجه أو مصفوفة أخرى
المعلّمات
m | المصفوفة اليسرى للمنتج والمصفوفة المطلوب تعيينها. |
---|---|
Rhs | المصفوفة اليمنى للناتج. |
بوصة |
بالنسبة إلى المصفوفة حسب صيغة المصفوفة، يتم ضبط m على منتج المصفوفة m * rhs
.
عند الجمع بين مصفوفتي تحويل 4×4 باستخدام هذه الدالة، ستتجاوب المصفوفة الناتجة مع إجراء تحويل Rhs أولاً متبوعًا بتحويل m الأصلي.
بالنسبة للمصفوفة حسب متغير المتجه، يتم إرجاع الضرب بعد الضرب للمتجه في المصفوفة، أي. m * in
.
عند ضرب float3 في rs_matrix4x4، يتم توسيع الخط المتجه باستخدام (1).
عند ضرب عدد عشري في rs_matrix4x4، يتم توسيع الخط المتجه باستخدام (0، 1).
عند ضرب عدد عشري في rs_matrix3x3، يتم توسيع الخط المتجه باستخدام (0).
بدءًا من واجهة برمجة التطبيقات 14، تستخدم هذه الدالة مصفوفة ثابتة كوسيطة أولى.
rsMatrixrot : تطبيق التدوير على مصفوفة تحويل
void rsMatrixrot(rs_matrix4x4* m, float rot, float x, float y, float z); |
المعلّمات
m | المصفوفة المطلوب تعديلها. |
---|---|
تعفن | مقدار تدوير الجهاز بالدرجات. |
x | المكون س للخط المتجه الذي يمثل محور الدوران. |
y | المكون Y للخط المتجه الذي يمثل محور الدوران. |
z | العنصر Z للخط المتجه الذي يمثل محور الدوران. |
اضرب المصفوفة m بمصفوفة دوران.
تعمل هذه الدالة على تعديل مصفوفة تحويل لإجراء دوران أولاً. ومحور الدوران هو الخط المتجه (x, y, z)
.
لتطبيق عملية التحويل المجمّعة هذه على متجه، اضرب المتجه في المصفوفة التي تم إنشاؤها باستخدام rsMatrixMultiply().
rsMatrixScale : تطبيق قياس على مصفوفة تحويل
void rsMatrixScale(rs_matrix4x4* m, float x, float y, float z); |
المعلّمات
m | المصفوفة المطلوب تعديلها. |
---|---|
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); |
المعلّمات
m | المصفوفة التي سيتم تعديلها. |
---|---|
عمود | عمود يستند إلى الصفر للعنصر المطلوب ضبطه. |
صف | صف العنصر المطلوب ضبطه بقيمة صفرية. |
v | القيمة المطلوب ضبطها. |
تحديد عنصر بمصفوفة.
تحذير: قد يكون ترتيب معلَمات العمود والصفوف غير متوقّع.
rsMatrix Translate : تطبيق الترجمة على مصفوفة تحويل
void rsMatrixTranslate(rs_matrix4x4* m, float x, float y, float z); |
المعلّمات
m | المصفوفة المطلوب تعديلها. |
---|---|
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 | المصفوفة المراد تبديلها. |
---|
بدِّل وضع المصفوفة m في مكانها.