دوال مصفوفة RenderScript

نظرة عامة

تتيح لك هذه الدوال معالجة المصفوفات المربعة للرتبة 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 : ضرب مصفوفة في متجه أو مصفوفة أخرى

float2 rsMatrixMultiply(const rs_matrix2x2* m, float2 in); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
float2 rsMatrixMultiply(rs_matrix2x2* m, float2 in); تمّت الإزالة من المستوى 14 لواجهة برمجة التطبيقات والمستويات الأعلى.
float3 rsMatrixMultiply(const rs_matrix3x3* m, float2 in); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
float3 rsMatrixMultiply(const rs_matrix3x3* m, float3 in); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
float3 rsMatrixMultiply(rs_matrix3x3* m, float2 in); تمّت الإزالة من المستوى 14 لواجهة برمجة التطبيقات والمستويات الأعلى.
float3 rsMatrixMultiply(rs_matrix3x3* m, float3 in); تمّت الإزالة من المستوى 14 لواجهة برمجة التطبيقات والمستويات الأعلى.
float4 rsMatrixMultiply(const rs_matrix4x4* m, float2 in); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
float4 rsMatrixMultiply(const rs_matrix4x4* m, float3 in); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
float4 rsMatrixMultiply(const rs_matrix4x4* m, float4 in); تمّت الإضافة في المستوى 14 من واجهة برمجة التطبيقات
float4 rsMatrixMultiply(rs_matrix4x4* m, float2 in); تمّت الإزالة من المستوى 14 لواجهة برمجة التطبيقات والمستويات الأعلى.
float4 rsMatrixMultiply(rs_matrix4x4* m, float3 in); تمّت الإزالة من المستوى 14 لواجهة برمجة التطبيقات والمستويات الأعلى.
float4 rsMatrixMultiply(rs_matrix4x4* m, float4 in); تمّت الإزالة من المستوى 14 لواجهة برمجة التطبيقات والمستويات الأعلى.
void rsMatrixMultiply(rs_matrix2x2* m, Cont rs_matrix2x2* rhs);
void rsMatrixMultiply(rs_matrix3x3* m, Cont rs_matrix3x3* rhs);
void rsMatrixMultiply(rs_matrix4x4* m, Cont rs_matrix4x4* rhs);
المعلّمات
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 في مكانها.