ภาพรวม
ฟังก์ชันเหล่านี้ช่วยให้คุณจัดการกับเมทริกซ์สี่เหลี่ยมจัตุรัสที่มีลําดับชั้น 2x2, 3x3 และ 4x4 ได้ ซึ่งมีประโยชน์อย่างยิ่งสำหรับการเปลี่ยนรูปแบบกราฟิก และเข้ากันได้กับ OpenGL
เราใช้ดัชนีฐาน 0 สำหรับแถวและคอลัมน์ เช่น องค์ประกอบสุดท้ายของ rs_matrix4x4 จะอยู่ที่ (3, 3)
RenderScript ใช้เมทริกซ์แบบคอลัมน์หลักและเวกเตอร์ตามคอลัมน์ การเปลี่ยนรูปแบบเวกเตอร์จะทําโดยการคูณเวกเตอร์ในภายหลัง เช่น (matrix * vector)
ตามที่ระบุโดย rsMatrixMultiply()
หากต้องการสร้างเมทริกซ์การเปลี่ยนรูปแบบที่ทำการแปลง 2 ครั้งพร้อมกัน ให้คูณเมทริกซ์ต้นทาง 2 รายการ โดยให้การเปลี่ยนรูปแบบแรกเป็นอาร์กิวเมนต์ด้านขวา เช่น หากต้องการสร้างเมทริกซ์การเปลี่ยนรูปแบบที่ใช้การเปลี่ยนรูปแบบ s1 ตามด้วย s2 ให้เรียกใช้ rsMatrixLoadMultiply(&combined, &s2, &s1)
ซึ่งมาจาก s2 * (s1 * v)
ซึ่งก็คือ (s2 * s1) * v
เรามีฟังก์ชัน 2 รูปแบบในการสร้างเมทริกซ์การเปลี่ยนรูปแบบ ได้แก่ Transformation ของ rsMatrixLoad และ Transformation ของ rsMatrix รูปแบบแรกจะจัดเก็บเมทริกซ์การเปลี่ยนรูปแบบไว้ในอาร์กิวเมนต์แรก ส่วนหลังจะแก้ไขเมทริกซ์การเปลี่ยนรูปแบบที่มีอยู่เพื่อให้การเปลี่ยนรูปแบบใหม่เกิดขึ้นก่อน เช่น หากคุณเรียกใช้ rsMatrixTranslate() ในเมทริกซ์ที่มีการสเกลแล้ว เมทริกซ์ที่ได้เมื่อนำไปใช้กับเวกเตอร์จะทำการแปลก่อนแล้วจึงทำการสเกล
สรุป
ฟังก์ชัน | |
---|---|
rsExtractFrustumPlanes | คำนวณระนาบฟรัสตัม |
rsIsSphereInFrustum | ตรวจสอบว่าทรงกลมอยู่ในระนาบทรงกรวยหรือไม่ |
rsMatrixGet | รับองค์ประกอบ 1 รายการ |
rsMatrixInverse | หาอินเวอร์สเมทริกซ์ในตำแหน่ง |
rsMatrixInverseTranspose | เปลี่ยนรูปแบบและสลับที่ของเมทริกซ์ |
rsMatrixLoad | โหลดหรือคัดลอกเมทริกซ์ |
rsMatrixLoadFrustum | โหลดเมทริกซ์การฉายภาพกรวย |
rsMatrixLoadIdentity | โหลดเมทริกซ์ข้อมูลประจำตัว |
rsMatrixLoadMultiply | คูณเมทริกซ์ 2 รายการ |
rsMatrixLoadOrtho | โหลดเมทริกซ์การฉายภาพออร์โธกราฟิก |
rsMatrixLoadPerspective | โหลดเมทริกซ์การฉายภาพด้วยมุมมอง |
rsMatrixLoadRotate | โหลดเมทริกซ์การหมุน |
rsMatrixLoadScale | โหลดเมทริกซ์การปรับขนาด |
rsMatrixLoadTranslate | โหลดเมทริกซ์การแปล |
rsMatrixMultiply | คูณเมทริกซ์ด้วยเวกเตอร์หรือเมทริกซ์อื่น |
rsMatrixRotate | ใช้การหมุนกับเมทริกซ์การเปลี่ยนรูปแบบ |
rsMatrixScale | ใช้การปรับขนาดกับเมทริกซ์การเปลี่ยนรูปแบบ |
rsMatrixSet | ตั้งค่าองค์ประกอบ 1 รายการ |
rsMatrixTranslate | ใช้การเปลี่ยนรูปแบบกับเมทริกซ์การเปลี่ยนรูปแบบ |
rsMatrixTranspose | สลับตําแหน่งเมทริกซ์ |
ฟังก์ชัน
rsExtractFrustumPlanes : คำนวณระนาบขอบเขตการมองเห็น
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* righ, float4* top, float4* bottom, float4* near, float4* far); | เพิ่มใน API ระดับ 24 |
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* right, float4* top, float4* bottom, float4* near, float4* far); | นำออกจาก API ระดับ 24 ขึ้นไป |
พารามิเตอร์
viewProj | เมทริกซ์ที่จะดึงเครื่องบินออกมา |
---|---|
ซ้าย | เครื่องบินด้านซ้าย |
ขวา | เครื่องบินที่ถูกต้อง |
ด้านบน | เครื่องบินด้านบน |
ด้านล่าง | เครื่องบินด้านล่าง |
บริเวณใกล้ๆ | ใกล้เครื่องบิน |
ไกล | เครื่องบินที่อยู่ไกล |
righ |
คํานวณระนาบทรงกระบอก 6 ระนาบจากเมทริกซ์การฉายภาพ
rsIsSphereInFrustum : ตรวจสอบว่าทรงกลมอยู่ในระนาบรูปกรวยหรือไม่
bool rsIsSphereInFrustum(float4* sphere, float4* left, float4* right, float4* top, float4* bottom, float4* near, float4* far); |
พารามิเตอร์
ทรงกลม | float4 ที่แสดงทรงกลม |
---|---|
ซ้าย | เครื่องบินด้านซ้าย |
ขวา | เครื่องบินที่ถูกต้อง |
ด้านบน | เครื่องบินด้านบน |
ด้านล่าง | เครื่องบินด้านล่าง |
บริเวณใกล้ๆ | ใกล้เครื่องบิน |
ไกล | เครื่องบินที่อยู่ไกล |
แสดงผลเป็น "จริง" หากทรงกลมอยู่ภายในระนาบทรงกรวย 6 ระนาบ
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 | เมทริกซ์ที่จะดึงองค์ประกอบ |
---|---|
คอลัมน์ | คอลัมน์แบบนับจาก 0 ขององค์ประกอบที่จะดึงข้อมูล |
แถว | แถวขององค์ประกอบที่จะดึงข้อมูลโดยนับจาก 0 |
แสดงผลองค์ประกอบเดียวของเมทริกซ์
คําเตือน: ลําดับของพารามิเตอร์คอลัมน์และแถวอาจไม่เป็นไปตามที่คาดไว้
rsMatrixInverse : เปลี่ยนเมทริกซ์ให้เป็นรูปแบบย้อนกลับ
bool rsMatrixInverse(rs_matrix4x4* m); |
พารามิเตอร์
m | เมทริกซ์ที่จะหาอินเวอร์ส |
---|
แสดงค่า "จริง" หากผนวกเมทริกซ์สลับกันได้สําเร็จ
rsMatrixInverseTranspose : เปลี่ยนค่าเมทริกซ์ให้เป็นค่าย้อนกลับและเปลี่ยนค่าเมทริกซ์
bool rsMatrixInverseTranspose(rs_matrix4x4* m); |
พารามิเตอร์
m | ตารางเพื่อแก้ไข |
---|
ระบบจะเปลี่ยนรูปแบบเมทริกซ์ก่อนแล้วจึงเปลี่ยนรูปแบบกลับ แสดงค่า "จริง" หากหาอินเวอร์สเมทริกซ์ได้สําเร็จ
rsMatrixLoad : โหลดหรือคัดลอกเมทริกซ์
void rsMatrixLoad(rs_matrix2x2* destination, const float* array); | |
void rsMatrixLoad(rs_matrix2x2* destination, const rs_matrix2x2* source); | |
void rsMatrixLoad(rs_matrix3x3* destination, const float* array); | |
void rsMatrixLoad(rs_matrix3x3* destination, const rs_matrix3x3* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, const float* array); | |
void rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix2x2* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix3x3* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix4x4* source); |
พารามิเตอร์
ปลายทาง | เมทริกซ์ที่จะตั้งค่า |
---|---|
อาร์เรย์ | อาร์เรย์ของค่าที่จะตั้งค่าเมทริกซ์ อาร์เรย์เหล่านี้ควรมีความยาว 4, 9 หรือ 16 รายการ ทั้งนี้ขึ้นอยู่กับขนาดของเมทริกซ์ |
แหล่งข้อมูล | เมทริกซ์แหล่งที่มา |
ตั้งค่าองค์ประกอบของเมทริกซ์จากอาร์เรย์ของตัวเลขทศนิยมหรือจากเมทริกซ์อื่น
หากโหลดจากอาร์เรย์ ตัวเลขทศนิยมควรอยู่ในลําดับแถวตามลําดับ เช่น องค์ประกอบ a
row 0, column 0
ควรอยู่ก่อน ตามด้วยองค์ประกอบ at
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, float left, float right, float bottom, float top, float near, float far); |
พารามิเตอร์
m | เมทริกซ์ที่จะตั้งค่า |
---|---|
ซ้าย | |
ขวา | |
ด้านล่าง | |
ด้านบน | |
บริเวณใกล้ๆ | |
ไกล |
สร้างเมทริกซ์การฉายภาพกรวยตัด ซึ่งจะเปลี่ยนรูปกล่องที่ระบุโดยระนาบการตัด 6 ระนาบ left, right, bottom, top, near, far
หากต้องการใช้การฉายนี้กับเวกเตอร์ ให้คูณเวกเตอร์ด้วยเมทริกซ์ที่สร้างขึ้นโดยใช้ rsMatrixMultiply()
rsMatrixLoadIdentity : โหลดเมทริกซ์เอกลักษณ์
void rsMatrixLoadIdentity(rs_matrix2x2* m); | |
void rsMatrixLoadIdentity(rs_matrix3x3* m); | |
void rsMatrixLoadIdentity(rs_matrix4x4* m); |
พารามิเตอร์
m | เมทริกซ์ที่จะตั้งค่า |
---|
ตั้งค่าองค์ประกอบของเมทริกซ์เป็นเมทริกซ์เอกลักษณ์
rsMatrixLoadMultiply : คูณเมทริกซ์ 2 รายการ
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); |
พารามิเตอร์
m | เมทริกซ์ที่จะตั้งค่า |
---|---|
lhs | เมทริกซ์ด้านซ้ายของผลิตภัณฑ์ |
rhs | เมทริกซ์ที่ถูกต้องของผลิตภัณฑ์ |
ตั้งค่า m เป็นผลิตภัณฑ์เมทริกซ์ของ lhs * rhs
หากต้องการรวมเมทริกซ์การเปลี่ยนรูปแบบ 4x4 2 รายการ ให้คูณเมทริกซ์การเปลี่ยนรูปแบบที่ 2 ด้วยเมทริกซ์การเปลี่ยนรูปแบบที่ 1 เช่น หากต้องการสร้างเมทริกซ์การเปลี่ยนรูปแบบที่ใช้การเปลี่ยนรูปแบบ 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 bottom, float top, float near, float far); |
พารามิเตอร์
m | เมทริกซ์ที่จะตั้งค่า |
---|---|
ซ้าย | |
ขวา | |
ด้านล่าง | |
ด้านบน | |
บริเวณใกล้ๆ | |
ไกล |
สร้างเมทริกซ์การฉายภาพออร์โธกราฟิก ซึ่งเปลี่ยนกล่องที่ระบุโดยระนาบการครอบตัด 6 ระนาบ left, right, bottom, top, near, far
ให้เป็นลูกบาศก์หน่วยที่มีมุมที่ (-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); |
พารามิเตอร์
m | เมทริกซ์ที่จะตั้งค่า |
---|---|
fovy | ขอบเขตการมองเห็น หน่วยเป็นองศาตามแกน Y |
ด้าน | อัตราส่วน x / y |
บริเวณใกล้ๆ | อยู่ใกล้กับระนาบการตัด |
ไกล | ระนาบการตัดส่วนที่ไกล |
สร้างเมทริกซ์การฉายภาพแบบเปอร์สเปกทีฟโดยสมมติว่ามุมมองเป็นแบบสมมาตร
หากต้องการใช้การฉายนี้กับเวกเตอร์ ให้คูณเวกเตอร์ด้วยเมทริกซ์ที่สร้างโดยใช้ rsMatrixMultiply()
rsMatrixLoadRotate : โหลดเมทริกซ์การหมุน
void rsMatrixLoadRotate(rs_matrix4x4* m, float rot, float x, float y, float z); |
พารามิเตอร์
m | เมทริกซ์ที่จะตั้งค่า |
---|---|
การเน่า | ระดับการหมุน หน่วยเป็นองศา |
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); |
พารามิเตอร์
m | เมทริกซ์ที่จะตั้งค่า |
---|---|
x | คูณเพื่อปรับขนาดคอมโพเนนต์ x |
y | คูณเพื่อปรับขนาดองค์ประกอบ y |
z | คูณเพื่อปรับขนาดองค์ประกอบ z |
ฟังก์ชันนี้จะสร้างเมทริกซ์การปรับขนาด ซึ่งจะคูณองค์ประกอบแต่ละรายการของเวกเตอร์ด้วยตัวเลข ตัวเลขนี้อาจเป็นค่าลบได้
หากต้องการปรับขนาดเวกเตอร์ ให้คูณเวกเตอร์ด้วยเมทริกซ์ที่สร้างขึ้นโดยใช้ rsMatrixMultiply()
rsMatrixLoadTranslate : โหลดเมทริกซ์การแปล
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); | เพิ่มใน API ระดับ 14 |
float2 rsMatrixMultiply(rs_matrix2x2* m, float2 in); | นำออกจาก API ระดับ 14 ขึ้นไป |
float3 rsMatrixMultiply(const rs_matrix3x3* m, float2 in); | เพิ่มใน API ระดับ 14 |
float3 rsMatrixMultiply(const rs_matrix3x3* m, float3 in); | เพิ่มใน API ระดับ 14 |
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); | เพิ่มใน API ระดับ 14 |
float4 rsMatrixMultiply(const rs_matrix4x4* m, float3 in); | เพิ่มใน API ระดับ 14 |
float4 rsMatrixMultiply(const rs_matrix4x4* m, float4 in); | เพิ่มใน API ระดับ 14 |
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); |
พารามิเตอร์
m | เมทริกซ์ด้านซ้ายของผลิตภัณฑ์และเมทริกซ์ที่จะตั้งค่า |
---|---|
rhs | เมทริกซ์ที่ถูกต้องของผลิตภัณฑ์ |
ใน |
สำหรับเมทริกซ์ตามเมทริกซ์ ให้ตั้งค่า m เป็นผลิตภัณฑ์เมทริกซ์ m * rhs
เมื่อรวมเมทริกซ์การเปลี่ยนรูปแบบ 4x4 2 รายการโดยใช้ฟังก์ชันนี้ เมทริกซ์ที่ได้จะสอดคล้องกับการเปลี่ยนรูปแบบ 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); |
พารามิเตอร์
m | ตารางเพื่อแก้ไข |
---|---|
การเน่า | ระดับการหมุน หน่วยเป็นองศา |
x | คอมโพเนนต์ 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 | เมทริกซ์ที่จะแก้ไข |
---|---|
คอลัมน์ | คอลัมน์แบบนับจากศูนย์ขององค์ประกอบที่จะตั้งค่า |
แถว | แถวที่จะเริ่มนับจาก 0 ขององค์ประกอบที่จะตั้งค่า |
v | ค่าที่จะตั้ง |
ตั้งค่าองค์ประกอบของเมทริกซ์
คําเตือน: ลําดับของพารามิเตอร์คอลัมน์และแถวอาจไม่เป็นไปตามที่คาดไว้
rsMatrixTranslate : ใช้การเปลี่ยนรูปแบบกับเมทริกซ์การเปลี่ยนรูปแบบ
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 เข้าที่